Double Colon在RewriteCond做什么?

Fel*_*lix 5 .htaccess mod-rewrite

例:

RewriteCond %{REQUEST_URI}::$1 ^(.*?)/?(.*)::\2$
Run Code Online (Sandbox Code Playgroud)

看起来这个运算符在任何参考或手册中都找不到.我在哪里可以找到它或任何人都可以解释这个运算符的作用?

anu*_*ava 7

像这样的规则:

RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]
Run Code Online (Sandbox Code Playgroud)

也可以写成(##在条件的两边起诉作为固定分隔符):

RewriteCond %{REQUEST_URI}##$1 ^(.*?/)(.*)##\2$
RewriteRule ^(.*)$ - [E=BASE:%1]
Run Code Online (Sandbox Code Playgroud)

说明:

  • 您可以在您的中使用$1捕获,因为实际上向后处理规则集.它从中的模式开始,如果匹配,则继续检查一个或多个.RewriteRuleRewriteCondmod_rewriteRewriteRuleRewriteCond
  • 所以你可以在看RewriteCond,在LHS(测试字符串)可以使用反向引用变量例如$1,$2OR %1,%2等,但RHS侧即条件字符串不能使用这些$1,$2OR %1,%2变量.
  • 在RHS条件部分内部,我们可以使用的只有后向引用是内部反向引用,即我们在这种情况下捕获的组.他们用表示\1,\2等等.
  • 在你的RewriteCond第一个被捕获的组是(.*?/).它将由内部反向引用`\ 1表示.
  • 正如你可以指出的那样,这个规则基本上是通过比较和\1 动态找到的.将是相同示例URI 的示例和示例.是在第一个被捕获的组或.这里它将填充或使用稍后在设置env变量时使用的值即.RewriteBase%{REQUEST_URI}$1%{REQUEST_URI}/directory/foobar.php$1foobar.php^(.*?/)::(.*)\1$%1\1%1\1/directory/%{ENV:BASE}

  • 很好的解释!谢谢. (2认同)