我试图理解这个重写条件到底是做什么的:
RewriteCond foo#%{ENV:bar} ^([^#]+)#\1$
如"Using custom environment variables in .htaccess"中所述,这可以用作在重写条件下测试环境变量的变通方法 - 例如“foo”等于bar的值。
编辑:
感谢@miah指出正则表达式的作用。虽然我仍然不明白为什么变量可以通过这种方式进行测试,无法直接测试。
更新:
因此,当CondPattern不评估变量并且在TestString中进行评估时,为什么这不起作用,因为bar在这里是空的:
RewriteCond %{ENV:bar} ^foo$
答案 0 :(得分:1)
这里聪明的一点是,\1
允许您引用正则表达式中较早的捕获组。
^
- 从您检查的字符串的开头(在本例中为foo#%{ENV:bar}
)(
- 启动捕获组[^#]+
- 一个或多个不是#
)
- 结束捕获组#
- 角色#
\1
- 第2-3行的捕获组$
- 字符串的结尾。<强>更新强>
问题是RewriteCond的CondPattern部分不评估环境变量,它必须是perl兼容的正则表达式或字符串。