mod_rewrite:这个RewriteRule有什么作用?

Dec*_*ler 27 mod-rewrite

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

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d 
Run Code Online (Sandbox Code Playgroud)

什么是第一法则呢?什么是孤独的冲刺?

RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]
Run Code Online (Sandbox Code Playgroud)

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

Gum*_*mbo 51

RewriteCond指令只是描述了一个附加条件RewriteRule指令.所以RewriteCond必须始终与a相关联RewriteRule.

在你的情况下,三个RewriteCond可能属于第一个RewriteRule像这样:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
Run Code Online (Sandbox Code Playgroud)

现在,如果RewriteRule匹配模式与当前请求URL(之前剥离的每个目录路径)以及条件是否满足,则应用此规则.

在这种情况下,条件仅在将请求URL映射到文件系统时才匹配,它匹配文件大小大于0(-s)的现有文件,或符号链接(-l)或目录(-d).因此,您的规则将应用于任何^.*$可以映射到文件系统中现有内容的URL(匹配任何内容).替换-只是意味着不改变任何东西.和NC(任何情况下,不区分大小写,无用在这种情况下)和大号(如果应用的最后一个规则)是标志修饰任一图案,更换或规则的执行.

  • @WillshawMedia是的,提到的规则基本上保留了对现有文件的任何请求,并退出重写过程.因此结合其他规则:只将任何不存在的文件重写为*index.php*. (2认同)