【问题标题】:mod_rewrite: what does this RewriteRule do?mod_rewrite:这个 RewriteRule 有什么作用?
【发布时间】:2011-01-07 07:27:41
【问题描述】:

鉴于这些条件(我知道它们的意思/作用):

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

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

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

我已经将它与 Zend 框架结合使用了很长一段时间,但我从未真正了解第一条规则的确切作用。

【问题讨论】:

    标签: mod-rewrite


    【解决方案1】:

    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,它们修改模式、替换或规则的执行。

    【讨论】:

    • 啊,是的,这是有道理的。很清楚的解释。谢谢。
    • 那么不改的目的是什么?是 2 条重写规则的组合,即“如果存在,则显示它,否则将其他所有内容转发到 index.php”
    • @WillshawMedia 是的,上面提到的规则基本上不会触及对现有文件的任何请求并退出重写过程。因此结合其他规则:仅将任何不存在的文件重写为 index.php.
    • RewriteCond %{REQUEST_FILENAME} -f 会是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多