RewriteEngine - 强制新的友好URL会导致重定向过多

时间:2017-03-24 13:32:22

标签: .htaccess mod-rewrite

此规则会转换网址,例如 http://www.example.com/index.php?page=abouthttp://www.example.com/about

等友好网址
RewriteRule ^([a-zA-Z_]+)?$     index.php?page=$1 [NC,L]

它运作良好。但是,目前旧的网址(如http://www.example.com/index.php?page=about)已在谷歌中编入索引。因此,除了该规则之外,我还需要将所有旧网址(例如http://www.example.com/index.php?page=about)重定向到新的友好网址(例如http://www,example.com/about),以便当访问者旧网址被重定向到友好网址时。我写了那条规则:

RewriteCond %{QUERY_STRING} ^page=([^&]+)$ [NC]
RewriteRule ^index\.php$ http://www.example.pl/%1? [NC,R=301,L]

并重定向到新网址,但不会显示网站内容,而是会引发错误ERR_TOO_MANY_REDIRECTS。

任何帮助?

1 个答案:

答案 0 :(得分:0)

由于你的内部重写规则,你得到了太多的重定向错误,因为他们在第一次重写迭代后将请求转发到同一位置,为了解决这个问题,在htaccess的顶部添加以下内容,

RewriteEngine on


RewriteCond %{ENV_REDIRECT_STATUS} 200
RewriteRule ^ - [L]

或者你可以匹配%{THE_REQUEST}而不是%{QUERY_STRING}来避免重写循环/过多的重定向错误

RewriteCond %{THE_REQUEST} /index\.php\?page=([^\s]+) [NC]