我有这个脚本:
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
答案 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]