我有这个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”而被忽略。在这里进行文件夹的最佳方法是什么?我应该在名字后加上正斜杠吗?
答案 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]