.htaccess重定向循环和正则表达式问题

时间:2012-07-30 08:30:06

标签: .htaccess

我有一个简单的htaccess重定向,可以将访问者从website.com/promotions发送到website.com/go/promotions。如果我使用下面的代码,我会得到一个重定向循环错误:

RewriteEngine on
RewriteCond %{REQUEST_URL} !^go$
RewriteRule promotion/index.html go/promotion/index.html [R,L,NC] 

如果请求网址包含“go”但是它似乎没有工作,RewriteCond应该通过不重定向来阻止循环。

此外,我正在尝试设置正则表达式,以便将promotion / anypage.html重定向到go / promotion / anypage.html。我尝试了以下代码,但它不匹配任何东西:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^go$
RewriteRule ^promotion/(.*)$   go/promotion/$1   [R,L,NC]

有没有人知道为什么这些块中的任何一个都无法正常工作?

干杯

2 个答案:

答案 0 :(得分:2)

%{REQUEST_URL}不是你可以匹配的var,你可能会想到%{REQUEST_URI},但它以一个前导斜杠开头,所以^go永远不会匹配任何东西。

您只需要一条规则:

RewriteEngine On
RewriteRule ^/?promotion/(.*)$ /go/promotion/$1 [R,L]

或者您可以使用mod_alias:

Redirect /promotion/ /go/promotion/

答案 1 :(得分:1)

您正在检查整个网址是否只是“自行”,而不是:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/?go/
RewriteRule promotion/index.html go/promotion/index.html [R,L,NC]