RewriteRule ^ - [L] AKA RewriteRule插入符号L

Dav*_*ese 16 regex mod-rewrite caret

虽然我可以打开Rewrite Logging并弄乱这个规则来弄清楚它做了什么(如果有的话),我打赌有人已经知道了.这是规则本身:

RewriteRule ^ - [L]
Run Code Online (Sandbox Code Playgroud)

这是在上下文中:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
Run Code Online (Sandbox Code Playgroud)

我想这意味着"匹配一切".我曾经认为"匹配一切"将是一个点,使得更明显的是没有丢失的代码,并且如果插入符号是唯一的东西,则正则表达式会出错.所以我看到外面的机会,这意味着别的东西.

Mar*_*tin 20

  • ^ 就像你说的那样,说"匹配任何东西"是一种有点非正统的方式
  • - 意思是"不采取行动"
  • [L]表示"最后一条规则",即RewriteRules在此之后停止处理

我假设在此之后还有其他规则,因为RewriteCond/ RewriteRule表示如果当前请求是针对现有文件或目录,mod_rewrite则应忽略任何后续规则RewriteRules.


用代码表示,这相当于:

do_rewrites(req)
{
  if (is_file(req) || is_dir(req))
    return;

  // other rules
  ...
}
Run Code Online (Sandbox Code Playgroud)