我正在尝试将某个子目录中的所有请求传递给名为“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。
答案 0 :(得分:2)
规则与真实文件不匹配,因为条件是这样说的
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
如果请求没有(!
)匹配真实文件(-f
)并且它与真实目录(-d
)不匹配,则这些条件匹配。
如果您想处理所有请求,请删除这些条件。您也可以删除第一个规则,因为它也是由这个规则处理的。这只留下了第二条规则,但是你必须防止用另一个条件重写循环
RewriteCond %{REQUEST_URI} !^/handler\.php
RewriteRule ^(.*)$ /handler.php?url=$1 [L,QSA]