为什么这个模式在匹配preg_match时不符合RewriteCond中的QUERY_STRING?

这是我的.htaccess文件。

 RewriteEngine on RewriteCond %{QUERY_STRING} ^(run=[a-z0-9A-z]{13})$ RewriteRule %{QUERY_STRING} \? [L] 

我所做的就是为所有QUERY_STRING重写QUERY_STRING ,类似于run=4f13665700694 ,什么也不做。 URL示例: http://thinkingmonkey.me/runs/?run=4f13665700694http://thinkingmonkey.me/runs/?run=4f13665700694 。 所以,RewriteCond应该匹配。 但是,上述不起作用。

但是,模式似乎是正确的。 因为, preg_matchRewriteRule使用PCRE - Perl Compatible Regular Expressions

我尝试使用preg_match

 $subject = "run=4f13665700694"; $pattern = "/^(run=[a-z0-9A-z]{13})$/"; echo preg_match($pattern, $subject); 

除了上面的例子,还会输出:

 1 

即成功匹配。

我不懂为什么。 我在这里错过了什么?

那么,这将会请求/runs/使用13个字符的字母数字run参数作为唯一的查询string,剥离查询string,并重写为/runs/index.php

 RewriteCond %{QUERY_STRING} ^run=\w{13}$ RewriteRule ^/runs/?$ /runs/index.php? [L]