【问题标题】:htaccess 301 redirection with RewriteRulehtaccess 301 重定向与 RewriteRule
【发布时间】:2014-09-26 23:13:17
【问题描述】:

我正在使用;

RewriteRule ^link1/([^/]*)/([^/]*)/link2-/([^/]*)$ link.php?var1=$1&var2=$2&var3=$3

上周我已将我的站点地图发送到 Google,但我意识到我使用了 link2* 而不是 link2-,因此我需要使用 301 将所有目录 link2- 重定向到 link2*

http://www.domain.com/link1/link2-/var1/var2/var3

应该使用 301 重定向到

http://www.domain.com/link1/link2*/var1/var2/var3 

现在我们的网站同时列出了 link2- 和 link2* 我们知道 google 不喜欢重复页面。

当我这样做时

RedirectMatch 301 /link1/link2-/var http://www.domain.com/link1/link2*/var

它重定向到

http://www.domain.com/link1/link2*?var1=link2&var1=var2&var3

这意味着重定向与重写混合...

我知道这有点复杂,但我真的需要帮助..

【问题讨论】:

    标签: .htaccess redirect


    【解决方案1】:

    在这种情况下,您不想使用RedirectMatch,因为它是一个不同的模块(mod_alias),它会与您的所有 mod_rewrite 规则一起应用并导致冲突。改用 mod_rewrite:

    RewriteRule ^(.*)/link2-(.*)$ /$1/link2*$2 [L,R=301]
    

    * 最终会被浏览器编码,看起来像:%2A

    【讨论】:

    • 它与其他重写混合在一起做同样的事情;链接应该是; domain.com/link1/link2*/var1/var2/2 但是在这段代码之后它变成了; domain.com/list2*/var1/var2/var3?var1=C-&var2=var3&var=2
    【解决方案2】:

    我使用了 Header("HTTP/1.1 301 Moved Permanently");用 php 而不是 htaccess 希望它不会是谷歌的问题。谢谢

    【讨论】: