2

我试图了解这种重写条件的确切作用:

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

“在 .htaccess 中使用自定义环境变量”中所述,这可以用作在重写条件下测试环境变量的解决方法 - 例如,“foo”等于 bar 的值。

编辑:

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

更新:

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

RewriteCond %{ENV:bar} ^foo$
4

1 回答 1

1

这里的巧妙之处在于,\1您可以在正则表达式中引用之前的捕获组。

  1. ^- 从您正在检查的字符串的开头(在这种情况下foo#%{ENV:bar}
  2. (- 开始捕获组
  3. [^#]+- 1 个或多个字符不是#
  4. )- 结束捕获组
  5. #- 性格#
  6. \1- 第 2-3 行的捕获组
  7. $- 字符串的结尾。

更新

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

于 2013-08-21T15:22:00.327 回答