.htaccess!-f规则不起作用

时间:2009-03-30 16:21:33

标签: .htaccess mod-rewrite

我多年来一直在为我的CMS使用简单的mod_rewrite规则,我现在正在制作一个新版本,我看到rewriteCond没有意义 - 我有标准“如果不是文件”但我仍然看到重写文件是即使他们不应该评估。我的重写代码:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ index.php?page=$1
RewriteRule ^([^/]+)/([^/]+)$ index.php?page=$1&var=$2

我加载/ page / var并且它可以正常工作index.php?page = page& var = var,但我尝试加载/css/file.css并加载index.php?page = css& var = file.css即使/css/file.css 一个文件,所以甚至不应该评估整个重写部分。

我从未见过htaccess显然无视自己的逻辑,有人可以帮我解决这个问题吗?有没有人遇到这样的事情?

4 个答案:

答案 0 :(得分:26)

RewriteCondition仅适用于下一条规则。你想要这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ index.php?page=$1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ index.php?page=$1&var=$2

答案 1 :(得分:14)

如果您使用的是Apache 2.2,那么您必须阅读:

http://amandine.aupetit.info/135/apache2-mod_rewrite/

剧透:你需要写的是:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-l           

Merc的。

答案 2 :(得分:3)

嗯,这应该有效。

尝试在.htaccess中设置以下道具:

RewriteLog /var/log/rewrite.log
RewriteLogLevel 3

调试您的请求。一旦完成,请记得重置此值,否则最终会得到一个已装满的硬盘。

答案 3 :(得分:1)

也许使用RewriteLogRewriteLogLevel来调试它正在做什么?

(来自http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

相关问题