.htaccess在重定向和重写规则时重定向循环

.htaccess在重定向和重写规则时重定向循环,.htaccess,mod-rewrite,redirect,.htaccess,Mod Rewrite,Redirect,我正在尝试在HTACCESS文件中执行以下操作: 我想重定向这个--> 对此--> 当我改变网站上的内部链接以阅读我想要的内容,并且我不使用R=301标志时,这可以很好地工作: RewriteRule ^my-pretty-url/$ /index\.php?page=foo [L] 但是。。。这里的问题是,我还想301将任何外部请求重定向到服务器,当我处理这些请求时,它将我置于重定向循环中 RewriteCond %{REQUEST_URI} /index.php$ RewriteCond

我正在尝试在HTACCESS文件中执行以下操作:

我想重定向这个-->

对此-->

当我改变网站上的内部链接以阅读我想要的内容,并且我不使用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可以单独用于内部重写,但它不处理外部请求

很明显,如果两者都在一起,就会产生一个循环。我该怎么解决这个问题


谢谢

尝试以下方法以防止循环

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

谢谢你的快速回复,但我想我可能遗漏了一个细节。。。正在调用的页面位于CMS中,并且该页面实际上无法重命名,因此需要“page=”参数。您和我的解决方案都假设页面实际上已重命名为漂亮的URL(真的?)@GregR。这很理想,但没有必要将页面重命名为漂亮的url。如果用户使用page param单击旧页面,第一条规则将它们重定向到pretty url。然后,第二条规则将把它重写回原来的url(就像CMS所期望的那样),另外的
RewriteCond
将防止循环。我在pretty url重写规则的末尾漏掉了“?”。一旦我把它放进去,它就完全起作用了。谢谢