鉴于这些条件(我知道他们的意思/做法):
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
第一个规则有什么作用?什么是孤独的冲刺?
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]
我一直在使用它已经有一段时间与Zend Framework结合使用了,但我从来没有真正得到第一条规则的确切内容。
答案 0 :(得分:51)
RewriteCond
directive只描述了RewriteRule
directive的附加条件。因此,RewriteCond
必须始终与RewriteRule
相关联。
在您的情况下,三个RewriteCond
可能属于第一个RewriteRule
,如下所示:
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
现在,如果RewriteRule
的模式与当前请求URL(之前删除的目录路径)和匹配,则会应用此规则。
在这种情况下,条件仅在将请求URL映射到文件系统时才匹配,它匹配文件大小大于0(-s
)的现有文件或符号链接({{1} })或目录(-l
)。因此,您的规则将应用于任何可以映射到文件系统中现有内容的URL(-d
匹配任何内容)。替换^.*$
只意味着不改变任何东西。并且 NC (无案例,不区分大小写,在此上下文中无用)和 L (最后一条规则,如果应用)是flags修改模式,替换或执行规则。