mod_rewrite .htaccess问题

时间:2011-06-28 16:08:07

标签: apache .htaccess mod-rewrite

我的htaccess中有以下几行将css文件重写到另一个位置:

RewriteCond {REQUEST_FILENAME} !-f [NC] OR
RewriteCond {REQUEST_FILENAME} !-d [NC]
RewriteRule ^\\/?(.*)\.(css|js)$ public/$2/$1.$2 [L,NC,NE]

但是当网站尝试加载文件时,会出现配置错误的错误。实际问题是1美元到2美元之间的点。我认为当服务器找到该文件时,它会进入无限循环。

是否有人知道该错误的原因?

3 个答案:

答案 0 :(得分:2)

自从我查看其中一些语法以来已经有一段时间了,但我认为OR会在括号内。那就是说,这是你问题的一部分;你需要两个RewriteCond条件都是真的。此外,您需要实际存在的文件;如果找不到该文件,则无论如何都将进入无限循环。另一种方法可能是:

RewriteRule ^public/(css|js)/ - [NC,L]
RewriteCond指令之前

,以便public/csspublic/js中的任何内容都不会被重写,无论它是否存在。

此外,在每个目录上下文(即.htaccess)中,RewriteRule匹配的值不以斜杠开头。这不会导致你的问题,但它可以节省你几个字符,让你的正则表达式更容易阅读。

答案 1 :(得分:2)

像这样编写规则以避免无限循环:

RewriteRule ^(?!public/)(.*)\.(css|js)$ public/$2/$1.$2 [L,NC]

向前看负面会阻止无限循环。

答案 2 :(得分:0)

它进入无限循环,因为您重定向的目录也满足正则表达式。