Web服务器URL网页中的重定向循环

时间:2016-01-22 10:49:35

标签: mod-rewrite

提前致谢

我正在尝试从

重定向网址的Web服务器(httpd.conf)中进行URL重定向

RewriteRule ^ / wps /(.*)/ insurance / hospital -

现金福利http://hostname/wps/ 1美元/零售 - 银行/保险/医院 - 现金 - 福利[L,R = 301]

当我尝试使用旧网址尝试新网址时,我会在网络浏览器中收到以下错误消息 此网页有一个重定向循环“

http://hostname/wps/portal/零售银行/零售 - 银行/零售 - 银行/零售 - 银行/零售 - 银行/零售 - 银行/零售 - 银行/零售 - 银行/零售 - 银行/零售 - 银行/零售 - 银行/零售银行/零售银行/零售银行/零售银行/零售银行/零售银行/零售银行/零售银行/零售银行/零售银行/保险/医院现金福利< / p>

输出是这样的我不知道为什么会出现这个循环错误并且我在浏览器中清除了所有缓存历史记录但仍然出错。

2 个答案:

答案 0 :(得分:2)

严格讲述“循环”问题。如果我正确读取你的RewriteRule,那么你的替换(目标URI)看起来会与你的模式相匹配......这就解释了循环。在这种情况下,通常的做法是使用RewriteCond在它返回时忽略替换(目标URI)。替换中看起来唯一的一个部分是/ retail-banking /部分。所以也许试试这个:

RewriteCond%{REQUEST_URI}!。+ / retail-banking /

并且需要直接在RewriteRule

之上

更新 - 跳过标志示例:

RewriteCond%{REQUEST_URI}。+ / retail-banking /
RewriteRule。? - [S = 50]
RewriteRule 1
RewriteRule 2
...... ... RewriteRule 50

答案 1 :(得分:0)

所以你想要从这个URL获取:

主机名/ WPS /门/保险/医院现金收益

到此网址:

主机名/ WPS /门/零售银行/保险/医院现金收益

它们基本相同,只是你的新品具有额外的“零售银行”水平。 /(。*)/匹配任何字符,包括“/”和其他字母。所以它将匹配/ portal /和/ portal / retail-banking和/ portal / retail-banking-retail-banking,这就是你有重定向循环的原因。

为什么不把整个网址放进去?你为什么甚至进行通配符搜索,因为它是如此具体?如果由于某种原因确实要匹配基本URL,那么请指定您期望的字符以及您期望的级别数而不是通配符搜索,如下所示:

^ / WPS /([A-Z0-9 - ] *)/保险/医院现金收益

这将匹配所有字母字符,所有数字字符和“ - ”字符,但不匹配“/”。你可以在URL中输入的唯一一个在URL中有效的字符是“%”,但除非你有一些需要转义的奇怪字符,否则你很可能不会需要它。该模式只期望/ wps /和/ insurance /之间的一个级别,因此它与新URL不匹配。尝试一下,如果您因为有其他网址要重定向而难以使用该模式,请尝试regexpal,启用多行,然后您可以粘贴多个网址并确保只有您想拥有的网址匹配匹配。