Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
apache重写导致重定向循环的规则_Apache_.htaccess_Redirect_Mod Rewrite - Fatal编程技术网

apache重写导致重定向循环的规则

apache重写导致重定向循环的规则,apache,.htaccess,redirect,mod-rewrite,Apache,.htaccess,Redirect,Mod Rewrite,我试图创建一个apache(2)RewriteRule,它使用一个查询字符串将用户重定向到一个易于阅读的URL,但是它导致了一个重定向循环 我想要实现的是,当用户请求index.php?layout=751&artnr=URL时,该请求将被重定向到/other/page/ 在某种程度上,重定向是有效的,但是一旦用户到达/other/page页面,Apache就会继续重定向用户 重写规则如下所示: RewriteCond %{REQUEST_URI} ^/index.php RewriteCond

我试图创建一个apache(2)RewriteRule,它使用一个查询字符串将用户重定向到一个易于阅读的URL,但是它导致了一个重定向循环

我想要实现的是,当用户请求
index.php?layout=751&artnr=
URL时,该请求将被重定向到
/other/page/

在某种程度上,重定向是有效的,但是一旦用户到达
/other/page
页面,Apache就会继续重定向用户

重写规则如下所示:

RewriteCond %{REQUEST_URI} ^/index.php
RewriteCond %{QUERY_STRING} ^layout=751&artnr=(.+)$
RewriteRule ^index\.php$ another/page/%1? [R=301,L]
RewriteCond %{THE_REQUEST} /index\.php\?layout=751&artnr=([^\s&]*) [NC]
RewriteRule ^ another/page/%1? [R=301,L,NE]
我已经搜索了很多关于这种情况的问题,但是没有一个真正能够解决我的问题,因为这些问题不使用查询字符串

我还尝试添加了
RewriteOptions maxrirects=1
选项,但这也不能解决问题

任何帮助都将不胜感激


提前感谢。

使用
请求变量,而不是
请求URI
,如下所示:

RewriteCond %{REQUEST_URI} ^/index.php
RewriteCond %{QUERY_STRING} ^layout=751&artnr=(.+)$
RewriteRule ^index\.php$ another/page/%1? [R=301,L]
RewriteCond %{THE_REQUEST} /index\.php\?layout=751&artnr=([^\s&]*) [NC]
RewriteRule ^ another/page/%1? [R=301,L,NE]
_REQUEST
变量表示Apache从浏览器收到的原始请求,在执行某些重写规则后不会被覆盖

这假设已在该规则上方设置了一个
RewriteBase


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

使用
请求
变量,而不是像这样使用
请求

RewriteCond %{REQUEST_URI} ^/index.php
RewriteCond %{QUERY_STRING} ^layout=751&artnr=(.+)$
RewriteRule ^index\.php$ another/page/%1? [R=301,L]
RewriteCond %{THE_REQUEST} /index\.php\?layout=751&artnr=([^\s&]*) [NC]
RewriteRule ^ another/page/%1? [R=301,L,NE]
_REQUEST
变量表示Apache从浏览器收到的原始请求,在执行某些重写规则后不会被覆盖

这假设已在该规则上方设置了一个
RewriteBase


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

非常感谢,它终于起作用了!也谢谢你的解释,所以我理解它是如何工作的。你已经接受了答案,这就足够了。很快,你将有15个代表点,可以投票给任何答案。非常感谢,它终于工作了!也谢谢你的解释,所以我理解它是如何工作的。你已经接受了答案,这就足够了。很快,你将有15个代表点,可以投票给任何答案。