我经常在PHP MVC应用程序看到一个Apache重写规则,看起来像这样:阿帕奇重写规则, - (破折号)作为替代
RewriteRule ^.*$ - [NC,L]
在Apache的文档说:
破折号表明,应该执行替代 (现有路径 通过未触及)。这是 当一个标志(见下文)需要 应用而不改变路径时使用。
因此,从我收集的内容中,您可以使用此标记来为RewriteRules遵循使用标志(即[NC])来转换路径?
有人可以请解释这个破折号RewriteRule好一点吗?
我经常在PHP MVC应用程序看到一个Apache重写规则,看起来像这样:阿帕奇重写规则, - (破折号)作为替代
RewriteRule ^.*$ - [NC,L]
在Apache的文档说:
破折号表明,应该执行替代 (现有路径 通过未触及)。这是 当一个标志(见下文)需要 应用而不改变路径时使用。
因此,从我收集的内容中,您可以使用此标记来为RewriteRules遵循使用标志(即[NC])来转换路径?
有人可以请解释这个破折号RewriteRule好一点吗?
看到这个答案:
mod_rewrite: what does this RewriteRule do?
这基本上意味着 “什么也不做,如果以前的RewriteConds比赛”。当RewriteConds不匹配时,下一个RewriteRule(s)将会做其他事情。在我链接到的帖子的情况下,下一个RewriteRule会重写URL,其中包括“index.php”。
所以它有点像一个else操作符。或者它与为我的所有RewriteCond添加感叹号(!)前缀相同?我确实试过寻找答案,但它们都与RewriteRules和转义破折号有关。 – Cobby 2010-12-04 00:14:07
我知道这有点旧了,但它基本上是说“嘿,我可能想使用Rewrite,但对于与上述RewriteCond匹配的网址,请保留并停止。”
EX:
# If file or directory exists, we wanna send them there
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
# Otherwise, use our smart page handler!
RewriteRule ^(.*)\.php$ virtualPage.php?page=$1 [L]
我用这个“什么都不做”的语法来防止父文件夹的.htaccess规则的执行。它在Apache 2.2中很有用。如果你使用Apache 2.4,你可以使用`RewriteOptions IgnoreInherit`来避免父文件夹的重写规则。 – maganap 2016-10-26 11:16:52