首页 文章

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

提问于
浏览
3

我在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 回答

  • 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]
    

相关问题