301重定向错误动态和静态index.php?

时间:2017-09-20 09:28:13

标签: php apache .htaccess redirect mod-rewrite

我有一个指向我新网站的基本链接。

RewriteCond %{QUERY_STRING} id=1
RewriteRule ^index\.php$ https://www.newdomain.com/about? [L,R=301]

RewriteCond %{QUERY_STRING} id=2
RewriteRule ^index\.php$ https://www.newdomain.com/contact? [L,R=301]

但我无法获得/和/index.php的正确方向。 因为如果您执行以下操作,则其他指示不起作用。

redirect 301 /index.php https://www.newdomain.com/
redirect 301 / https://www.newdomain.com/

这是编辑index.php的结果:

/ https://www.newdomain.com/
/index.php https://www.newdomain.com/index.php
/index.php?id=1 https://www.newdomain.com/index.php?id=1

我该如何解决?

1 个答案:

答案 0 :(得分:1)

您不应该混合使用mod_rewrite(RewriteRule)和mod_alias(Redirect)指令。你可能会遇到冲突 - 这可能就是这里发生的事情。尽管配置文件中有明显的顺序,但在请求期间,不同的Apache模块在不同的时间执行。 mod_rewrite先执行,但Redirect对原始请求有效,并且看不到mod_rewrite重写的请求。

您需要将Redirect指令更改为mod_rewrite RewriteRule指令,并排列规则,以便最具体的指令。

例如:

RewriteCond %{QUERY_STRING} id=1
RewriteRule ^index\.php$ https://www.newdomain.com/about? [L,R=301]

RewriteCond %{QUERY_STRING} id=2
RewriteRule ^index\.php$ https://www.newdomain.com/contact? [L,R=301]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php$ https://www.newdomain.com/ [R=301,L]

在测试之前,您需要清除浏览器缓存。 (通常更容易用302测试 - 临时 - 重定向因为这个原因。)

然而,你的重定向应该做什么并不完全清楚?除非redirect 301 / https://www.newdomain.com/是完全不同的网站,否则newdomain.com会创建重定向循环?但如果是,那么可能有更好的方法来重定向流量?