此规则会转换网址,例如 http://www.example.com/index.php?page=about到http://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。
任何帮助?
答案 0 :(得分:0)
由于你的内部重写规则,你得到了太多的重定向错误,因为他们在第一次重写迭代后将请求转发到同一位置,为了解决这个问题,在htaccess的顶部添加以下内容,
RewriteEngine on
RewriteCond %{ENV_REDIRECT_STATUS} 200
RewriteRule ^ - [L]
或者你可以匹配%{THE_REQUEST}而不是%{QUERY_STRING}来避免重写循环/过多的重定向错误
RewriteCond %{THE_REQUEST} /index\.php\?page=([^\s]+) [NC]