mod_rewrite:这个RewriteRule做了什么?

时间:2010-01-20 14:45:01

标签: mod-rewrite

鉴于这些条件(我知道他们的意思/做法):

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d 

第一个规则有什么作用?什么是孤独的冲刺?

RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]

我一直在使用它已经有一段时间与Zend Framework结合使用了,但我从来没有真正得到第一条规则的确切内容。

1 个答案:

答案 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修改模式,替换或执行规则。