示例:
RewriteCond %{REQUEST_URI}::$1 ^(.*?)/?(.*)::\2$
看起来这个运营商在任何参考或手册中都找不到。我在哪里可以找到它或任何人都可以解释这个操作符的作用?
答案 0 :(得分:7)
这样的规则:
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]
也可以写成(在条件的任一侧使用##
作为固定分隔符):
RewriteCond %{REQUEST_URI}##$1 ^(.*?/)(.*)##\2$
RewriteRule ^(.*)$ - [E=BASE:%1]
<强>解释强>
$1
中使用从RewriteRule
抓取的RewriteCond
,因为mod_rewrite
实际向后处理规则集。它从RewriteRule
中的模式开始,如果匹配,则继续检查一个或多个RewriteCond
。RewriteCond
中看到的那样,LHS(左侧/测试字符串)可以使用反向引用变量,例如$1
,$2
或%1
,%2
等,但RHS(右侧)即条件字符串无法使用这些$1
,$2
或%1
,%2
变量。\1
,\2
等表示。RewriteCond
首次捕获的群组中(.*?/)
。它将由内部反向引用\1
表示。RewriteBase
和%{REQUEST_URI}
来标记此规则基本上是$1
动态。 %{REQUEST_URI}
的示例将为/directory/foobar.php
,同一示例URI的$1
示例将为foobar.php
。 ^(.*?/)::(.*)\1$
正在区分第一个被捕获的小组%1
或\1
。在此处,它将使%1
或\1
填充值/directory/
,稍后在设置env变量%{ENV:BASE}
时使用该值E=BASE:%1
。