【问题标题】:Redirect 301 / Rewrite conundrum重定向 301 / 重写难题
【发布时间】:2011-06-17 20:14:42
【问题描述】:

在我的网站上,用户可以添加需要重定向的各种 URL。

例如;来自:domain.com/oldpage/36/

至此:domain.com/newpage/47/

它们像这样添加到 .htaccess 中:

Redirect 301 /oldpage/36/ /new-page/47/

但是当访问旧页面时,他们会得到这个:

domain.com/newpage/47/?pid=36&pagename=oldpage

我很确定这些重写规则导致了这种困境:

RewriteRule ([^.]+)/([0-9]+)/$ index.php?pid=$2&pagename=$1
RewriteRule ([^.]+)/([0-9]+)/([^.]+) index.php?pid=$2&pagename=$1&vars=$3

但是,mod_rewrite 的东西不是我的强项,所以我不知道如何解决它。

有什么想法吗?

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

    添加? 使Rewrite 不会将查询字符串添加到url。

    所以这应该可以工作:

    Redirect 301 /oldpage/36/ /new-page/47/?
    

    作为预防措施,您也可以将其添加到:

    RewriteRule ([^.]+)/([0-9]+)/$ index.php?pid=$2&pagename=$1?
    RewriteRule ([^.]+)/([0-9]+)/([^.]+) index.php?pid=$2&pagename=$1&vars=$3?
    

    但只有在需要时

    【讨论】:

    • 感谢您的及时回复。这几乎可以工作,查询字符串已被删除,但问号仍然存在,所以我现在有:domain.com/new-page/37/?
    • 你可能无法摆脱它。有那么大吗?
    • TBH,我认为这是一个很小的代价,所以我认为可以。非常感谢。
    【解决方案2】:

    既然你已经在使用 mod_rewrite,我想你也应该使用 rewrites 来进行重定向

    RewriteRule /oldpage/36/ /new-page/47/ [R=301]
    

    这会将 URL 从旧的“重写”为新的,并将浏览器重定向到状态代码为 301 的新 URL。 [R] 指令表示重定向,它也停止处理其他规则,因此只有当新请求从具有新 url 的浏览器发送时才会处理其他规则。

    【讨论】:

    • 你需要 ? 到 url 的末尾来删除实际上困扰他的参数
    • 我相信此时没有参数。即使有,它也会重定向到无参数的 url
    猜你喜欢
    • 1970-01-01
    • 2010-12-31
    • 2013-01-15
    • 2013-12-21
    • 2015-03-04
    • 2017-03-06
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    相关资源
    最近更新 更多