使用时,重写规则不会传递1美元!

时间:2010-07-27 17:56:19

标签: apache mod-rewrite

我正在使用此规则:

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 个答案:

答案 0 :(得分:2)

规则被否定,因此当且仅当正则表达式 与正在处理的URI匹配时才会执行该规则。由于捕获组与localhost/foo不匹配,因此正则表达式引擎无法放入$1。解决方案是避免在RewriteRule指令中使用否定,而是使用RewriteCond指令来检查否定的正则表达式。以下规则集应该有效。 (不过我没有测试过。有可能在某个地方出现了错误。)

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