首页 文章

mod_rewrite:这个RewriteRule做了什么?

提问于
浏览
27

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

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

first 规则有什么作用?什么是孤独的冲刺?

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

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

1 回答

  • 50

    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 )的现有文件或符号链接( -l )或目录( -d )匹配 . 因此,您的规则将应用于任何可以映射到文件系统中现有内容的URL( ^.*$ 匹配任何内容) . 替换 - 只是意味着不改变任何东西 . 并且NC(没有大小写,不区分大小写,在此上下文中无用)和L(最后一条规则,如果应用)是flags,它们修改规则的模式,替换或执行 .

相关问题