重写规则不能正常运作

时间:2014-01-09 13:29:03

标签: .htaccess mod-rewrite

我试图改变htacces中的一些东西,我试图做这样的事情:

RewriteCond %{REQUEST_URI} ^/(.*).xml$
RewriteCond %{HTTP_HOST} ^([^.]{2})\. [OR] [NC]
RewriteCond %{HTTP_HOST} !^$ [NC]
RewriteRule ^(.+)$ sitios/es/$1 [L]

如果我将RewriteRule更改为这样的工作正常:

RewriteRule ^(.+)$ sitios/es/something [L]

我猜这个问题是1美元,因为我收到了内部错误 我可能做错了什么?

1 个答案:

答案 0 :(得分:1)

看起来你的规则创造了一个无限循环。

例如,如果我访问ab.example.com/anything.xml

  • %{REQUEST_URI} /anything.xml^/(.*).xml$匹配,括号与anything匹配。

  • %{HTTP_HOST}ab.example.com,匹配^([^.]{2})\.,括号匹配ab

  • %{HTTP_HOST}的第二个条件也匹配,因为ab.example.com不是空字符串(^$匹配空字符串)

  • 最后,RewriteRule将请求URL路径(anything.xml)与^(.+)$匹配,这是正常的,括号(稍后使用$1引用)包含anything.xml

因此,我对ab.example.com/anything.xml的请求在内部被重定向(因为您没有R标志)到ab.example.com/sitios/en/anything.xml,这也符合(see why)上述所有规则,所以它会被内部重定向到ab.example.com/sitios/en/sitios/en/anything.xml,它也会匹配,依此类推等等......