我试图制作一个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
选项,但这并没有解决问题。
任何帮助都将不胜感激。
提前致谢。
答案 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
设置为高于此规则。
清除浏览器缓存或使用新浏览器测试此更改。