.htaccess-f规则不起作用

.htaccess-f规则不起作用,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,多年来,我一直在为我的CMS使用简单的mod_重写规则,现在正在制作一个新版本,我发现重写规则没有意义——我有标准“如果不是文件”,但我仍然看到重写规则正在评估,即使它们不应该被评估。我的重写代码: RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)$ index.php?page=$1 RewriteRule ^([^/]+)/([^/]+)$ index.ph

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

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明显违反其自身逻辑,有人能帮我弄清楚这一点吗?有人遇到过这样的事情吗?

嗯,那应该行

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

RewriteLog /var/log/rewrite.log
RewriteLogLevel 3

调试您的请求。请记住在完成后重置此值,否则将导致硬盘驱动器充满。

重写条件只适用于下一条规则。你想要这个:

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

也许可以使用
RewriteLog
RewriteLogLevel
来调试它在做什么


(From)

如果您使用的是Apache 2.2,则必须阅读以下内容:

剧透:你需要写的实际上是:

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

美塞苔丝。

太好了,这么多年来我一直在做这样的mod_重写,结果证明我的逻辑是偶然的。。。非常感谢,谢谢你!!。。请记住,如果文件不存在,它将不会404,它只会将其传递给下一条规则。@Colin-我的看法正是如此。现在我必须弄清楚这是一种解脱还是一种担忧…@Greg-通过使用这个条件RewriteRule^([^/]+)/([^/]+)$index.php?page=$1&var=$2,URL保持不变。请帮助我this@Roberto,基于此重写条件%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}-重写规则^([^/]+)/([^/]+)$index.php?page=$1&var=$2,URL保持不变。我需要为RewriteLog更改URL+1,它帮助我调试了我的重写规则。我已经寻找了很长时间,完全解决了我的问题(我使用的不是vhost,而是容器)。谢谢因为提问者不会接受答案,如果我的答案真的获得最多的赞成票,那就太好了……我自己发现的,但我不得不在StackOverflow中搜索像这样的答案,只是为了在某个地方投赞成票。