【问题标题】:Excluding files from htaccess rewrite rules从 htaccess 重写规则中排除文件
【发布时间】:2011-12-22 21:08:27
【问题描述】:

我的 PHP 应用程序中有一个 htaccess 重写设置,以通过引导程序文件路由文件。本质上,目标是获取诸如 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 .htaccess bootstrapping


【解决方案1】:

您应该将新规则移到 RewriteCond 块的顶部:

RewriteRule ^/?ajaxDispatcher.php$ - [L]

否则,RewriteConditions 不再涵盖扩展 RewriteRule,我认为它们是针对这些扩展的。

当然,另一种选择是把它变成另一个 RewriteCond:

RewriteCond %{SCRIPT_NAME}  !ajaxDispatcher

或者将其作为断言注入到最终的 RewriteRule (?!ajaxDispatcher.php)

订购的东西最好在Serverfault上解释:https://serverfault.com/questions/214512/everything-you-ever-wanted-to-know-about-mod-rewrite-rules-but-were-afraid-to-as

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-12-22
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 1970-01-01
      • 2016-12-27
      • 2014-10-27
      相关资源
      最近更新 更多