Php 从htaccess重写规则中排除文件

Php 从htaccess重写规则中排除文件,php,.htaccess,bootstrapping,Php,.htaccess,Bootstrapping,我在PHP应用程序中有一个htaccess重写设置,可以通过引导程序文件路由文件。本质上,目标是获取一个URL,如www.domain.com/view/key/value/key/value,视图将相应地路由到该URL,并且可以通过我在引导程序中编写的函数将键/值对发送到视图。一切都很顺利 也就是说,直到我开始做ajax-y的东西。我通过一个文件ajaxDispatcher.php路由所有ajax查询。当我这样做时,htaccess(正确地)捕获了请求,并使用我的引导程序对其进行了不适当的路由

我在PHP应用程序中有一个htaccess重写设置,可以通过引导程序文件路由文件。本质上,目标是获取一个URL,如www.domain.com/view/key/value/key/value,视图将相应地路由到该URL,并且可以通过我在引导程序中编写的函数将键/值对发送到视图。一切都很顺利

也就是说,直到我开始做ajax-y的东西。我通过一个文件ajaxDispatcher.php路由所有ajax查询。当我这样做时,htaccess(正确地)捕获了请求,并使用我的引导程序对其进行了不适当的路由。类似地,它试图路由不需要的文件,如.ico、.css等

我发现了文件扩展名路由异常,但是,我无法让.htaccess忽略单个文件ajaxDispatcher.php的重写规则。以下是我的代码:

 RewriteEngine On
 RewriteBase /
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^/ajaxDispatcher.php$ $0 [L]
 RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php?route=$1 [L]

如何使.htaccess仅忽略ajaxDispatcher的路由规则?

如果从显示的代码中删除
ajaxDispatcher.php
行,它应该可以工作-因为
-f
-d
规则,对实际存在的文件的请求将被排除在重写规则之外。

您应该将新规则移到“重写条件”块的顶部:

RewriteRule ^/?ajaxDispatcher.php$ - [L]
否则,RewriteConditions将不再包含扩展RewriteRule,我认为它们是为扩展RewriteRule准备的

另一种选择是将其转换为另一种重写,当然:

RewriteCond %{SCRIPT_NAME}  !ajaxDispatcher
或者将其作为断言注入最终重写规则
(?!ajaxDispatcher.php)


订购的事情最好在Serverfault上解释:

卸下ajaxDispatcher线路,它应该可以工作