代码之家  ›  专栏  ›  技术社区  ›  johnjohn

使用时重写规则不传递$1!?

  •  1
  • johnjohn  · 技术社区  · 14 年前

    我使用的规则是:

    RewriteRule !^(.*?/.*|.*?\.(?:php|html)$)$ headers.php?a=$1 [L]
    

    (基于 Regex match this OR that? )

    它改写为 headers.php 当我打字时 localhost/foo 但是 a 变量为空,而不是 foo (我检查过了) var_dump($_REQUEST) )

    你知道为什么吗?我试着用

    RewriteCond  %{REQUEST_URI}  !headers
    

    但事实并非如此。

    谢谢您!

    1 回复  |  直到 14 年前
        1
  •  2
  •   bcat    14 年前

    规则被否定,因此只有当正则表达式 匹配正在处理的URI。因为捕获组不匹配 localhost/foo Regex引擎没什么可投入的 $1 . 解决方法是避免在你的 RewriteRule 指令,而不是使用 RewriteCond 检查已否定regex的指令。以下规则集应该有效。(不过,我还没有测试。有可能是某个地方出错了。)

    RewriteCond %{REQUEST_URI} !/.*/
    RewriteCond %{REQUEST_URI} !\.(html|php)$
    RewriteRule (.*) headers.php?a=$1 [L]