htaccess忽略/排除RewriteRule中的文件夹

时间:2014-06-09 20:25:17

标签: php .htaccess mod-rewrite

我有这个脚本:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/?(images|orders)/

RewriteRule ^(.*)$ index.php?til=$1 [L,QSA]

它在我的localhost中工作正常,但当我将其上传到我的主机并转到www.domain.com/images/时,它会重定向到index.php?til=403.shtml

2 个答案:

答案 0 :(得分:1)

mod_rewrite重复扫描htaccess文件,直到不再进行替换。 [L]标志表示"此循环中的 "。 W.e.f. Apache 2.4 [End]标志符合您的意图。有关更多讨论,请参阅我的Tips for debugging .htaccess rewrite rules

我怀疑问题是dhared主机已启用多视图,而您不在您的开发实例上。始终尝试尽可能地将您的开发实例与托管服务提供商对齐。如果您不需要它,请务必关闭多视图。

您可以通过添加[NS]标志始终在每个规则的基础上禁用此功能。在这种情况下,您将它添加到第一个规则,然后您会发现它现在有效。

答案 1 :(得分:0)

好吧这似乎有用..

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/orders/.* [NC]
RewriteCond %{REQUEST_URI} !^/401.shtml [NC]
RewriteCond %{REQUEST_URI} !^/403.shtml [NC]

RewriteRule ^(.*)$ index.php?til=$1 [L,QSA]