【问题标题】:Apache RewriteRule, - (dash) as substitutionApache RewriteRule,-(破折号)作为替代
【发布时间】:2022-03-17 09:30:59
【问题描述】:

我经常在 PHP MVC 应用程序中看到一个 Apache RewriteRule,看起来像这样:

RewriteRule ^.*$ - [NC,L]

Apache docs for the RewriteRule directive 声明:

破折号表示没有替换 应执行(现有路径 通过未触及)。这是 当一个标志(见下文)需要时使用 在不改变路径的情况下应用。

所以根据我的收集,您可以使用它来转换使用标志的路径,即[NC],以便RewriteRules 跟随?

谁能更好地解释一下这个破折号RewriteRule

【问题讨论】:

  • 我使用这种“什么都不做”语法来阻止父文件夹的 .htaccess 规则执行。它对 Apache 2.2 很有用。如果您使用的是 Apache 2.4,您可以使用 RewriteOptions IgnoreInherit 来避免父文件夹的重写规则。

标签: apache mod-rewrite


【解决方案1】:

看到这个答案:

mod_rewrite: what does this RewriteRule do?

它本质上的意思是“如果前面的 RewriteConds 匹配,什么也不做”。当 RewriteConds 不匹配时,下一个 RewriteRule(s) 将改为执行其他操作。对于我链接到的帖子,下一个 RewriteRule 会重写包含“index.php”的 url。

【讨论】:

  • 所以它有点像 else 运算符。或者它与在我所有的 RewriteCond 前加上一个感叹号 (!) 一样?我确实尝试搜索答案,但它们都与 RewriteRules 和转义破折号有关。
  • 所以,如果我理解正确的话,如果最后一个 [L] 被应用,使用破折号作为目标最有意义?
【解决方案2】:

我知道这有点老了,但它基本上说“嘿,我可能想使用 Rewrite,但是对于与上述 RewriteCond(s) 匹配的 url,让它保持并停止。”

前:

# 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]

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2011-08-28
    相关资源
    最近更新 更多