当Redirect和RewriteRule结合在一起时,.htaccess重定向循环

时间:2012-02-01 20:38:06

标签: .htaccess mod-rewrite redirect

我在HTACCESS文件中尝试以下内容:

我想301重定向此 - > http://www.domain.com/somepage.php?page=foo

到此 - > http://www.domain.com/my-pretty-url/

当我改变网站上的内部链接以阅读我想要的内容并且我不使用R = 301标志时,这样可以正常工作:

RewriteRule ^my-pretty-url/$ /index\.php?page=foo [L]

但是......这里的故障是我还想301将任何外部请求重定向到服务器,当我处理它时,它会让我进入重定向循环。

RewriteCond %{REQUEST_URI} /index.php$
RewriteCond %{QUERY_STRING} ^page=foo$
RewriteRule ^.*$ http://www.domain.com/my-pretty-url/? [R=301,L]

RewriteRule ^my-pretty-url/$ /index\.php?page=foo [L]

RewriteCond规则本身不起作用,只有底部的单个RewriteRule本身可用于内部重写,但它不处理外部请求。

显然,如果我在一起,那就是创造一个循环。我该如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:4)

请尝试以下操作以防止循环

#prevent internal redirects, and prevent loop
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond %{REQUEST_URI} /index.php$
RewriteCond %{QUERY_STRING} ^page=foo$
RewriteRule ^.*$ http://www.domain.com/my-pretty-url/? [R=301,L]

RewriteRule ^my-pretty-url/$ /index\.php?page=foo [L]