理解...... RewriteCond foo#%{ENV:bar} ^([^#] +)#\ 1 $

时间:2013-08-21 15:13:03

标签: .htaccess mod-rewrite

我试图理解这个重写条件到底是做什么的:

RewriteCond foo#%{ENV:bar} ^([^#]+)#\1$

"Using custom environment variables in .htaccess"中所述,这可以用作在重写条件下测试环境变量的变通方法 - 例如“foo”等于bar的值。

编辑:

感谢@miah指出正则表达式的作用。虽然我仍然不明白为什么变量可以通过这种方式进行测试,无法直接测试。

更新:

因此,当CondPattern不评估变量并且在TestString中进行评估时,为什么这不起作用,因为bar在这里是空的:

RewriteCond %{ENV:bar} ^foo$

1 个答案:

答案 0 :(得分:1)

这里聪明的一点是,\1允许您引用正则表达式中较早的捕获组。

  1. ^ - 从您检查的字符串的开头(在本例中为foo#%{ENV:bar}
  2. ( - 启动捕获组
  3. [^#]+ - 一个或多个不是#
  4. 的字符
  5. ) - 结束捕获组
  6. # - 角色#
  7. \1 - 第2-3行的捕获组
  8. $ - 字符串的结尾。
  9. <强>更新

    问题是RewriteCond的CondPattern部分不评估环境变量,它必须是perl兼容的正则表达式或字符串。