如何防止RewriteRule忽略此URL?

时间:2013-04-12 19:01:18

标签: apache .htaccess mod-rewrite

我有这个RewriteRule:

RewriteRule !^(div|sitemapXML|cache|AJAX|xml|html|favicon.ico|robots.txt|script|cms|style|image|inc|img|templates|index.html) index.php

但是例如“http://www.mydomain.com/divindu/”因被排除的“div”而被忽略。在这里进行文件夹的最佳方法是什么?我应该在名字后加上正斜杠吗?

2 个答案:

答案 0 :(得分:2)

看起来您正在尝试实现忽略现有文件的全能规则。你应该简单地使用Apache的FallbackResource指令。对于旧版本的Apache或更多粒度控件,请查看RewriteCond的特殊-d和-f标志,您可以使用它们从RewriteRule中明确排除现有文件和文件夹。

答案 1 :(得分:2)

根据类型,常规文件或目录,您可以附加斜杠/或字符串美元符号$的结尾。您还可以将模式移动到RewriteCond并将目录和文件拆分为两个

# exclude some directories
RewriteCond %{REQUEST_URI} !^/(div|sitemapXML|cache|AJAX|xml|html|script|cms|style|image|inc|img|templates)/
# exclude some existing files
RewriteCond %{REQUEST_URI} !^/(favicon.ico|robots.txt|index.html)$
RewriteRule ^ index.php [L]

或者,如果您想要排除@Niels假设的所有现有文件和目录,您可以使用

# exclude existing files
RewriteCond %{REQUEST_FILENAME} !-f
# exclude directories
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]