apache rewriterule导致重定向循环

时间:2017-11-08 11:41:59

标签: apache .htaccess redirect mod-rewrite

我试图制作一个apache(2)RewriteRule,它使用QUERY_STRING将用户重定向到友好的读取URL,但它导致重定向循环。

我想要实现的是,当用户请求index.php?layout=751&artnr=#网址时,此请求会被重定向到/another/page/#

在某种程度上,Redirect可以正常工作,但Apache一旦到达/another/page页面就会继续重定向用户

RewriteRule看起来像这样:

RewriteCond %{REQUEST_URI} ^/index.php
RewriteCond %{QUERY_STRING} ^layout=751&artnr=(.+)$
RewriteRule ^index\.php$ another/page/%1? [R=301,L]

我一直在搜索有关这种情况的很多问题,但他们都没有真正有解决我问题的答案,因为这些问题不会使用QUERY_STRING。

我还尝试添加RewriteOptions maxredirects=1选项,但这并没有解决问题。

任何帮助都将不胜感激。

提前致谢。

1 个答案:

答案 0 :(得分:0)

使用THE_REQUEST变量代替REQUEST_URI,如下所示:

RewriteCond %{THE_REQUEST} /index\.php\?layout=751&artnr=([^\s&]*) [NC]
RewriteRule ^ another/page/%1? [R=301,L,NE]

THE_REQUEST变量表示Apache从您的浏览器收到的原始请求,并且在执行某些重写规则后不会被覆盖。

这假设已将RewriteBase设置为高于此规则。

清除浏览器缓存或使用新浏览器测试此更改。