当URL包含真实文件名时,为什么我的.htaccess不起作用?

时间:2017-03-30 16:36:54

标签: apache .htaccess

我正在尝试将某个子目录中的所有请求传递给名为“handler.php”的文件。如果URL不是实际的文件名,我的.htaccess就可以工作,但如果我输入真实文件的名称,则不行。它改为直接加载该文件,从不命中handler.php。

有人可以向我解释我在这里做错了什么吗? .htaccess文件如下所示:

RewriteEngine On

RewriteRule ^$ handler.php?url=$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /handler.php?url=$1 [L,QSA]

我在这里做错了吗?我希望所有请求都将url传递给handler.php。

1 个答案:

答案 0 :(得分:2)

规则与真实文件不匹配,因为条件是这样说的

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

如果请求没有(!)匹配真实文件(-f)并且它与真实目录(-d)不匹配,则这些条件匹配。

如果您想处理所有请求,请删除这些条件。您也可以删除第一个规则,因为它也是由这个规则处理的。这只留下了第二条规则,但是你必须防止用另一个条件重写循环

RewriteCond %{REQUEST_URI} !^/handler\.php
RewriteRule ^(.*)$ /handler.php?url=$1 [L,QSA]