为什么这个模式在 RewriteCond 中与 QUERY_STRING 不匹配,而在 preg_match 中却匹配?

为什么这个模式在 RewriteCond 中与 QUERY_STRING 不匹配,而在 preg_match 中却匹配?

以下是我的.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=4f13665700694。因此,RewriteCond 应该匹配。但上述方法不起作用。

但这种模式似乎是正确的。因为,两个都preg_match&RewriteRule使用PCRE - Perl Compatible Regular Expressions

我尝试使用preg_match

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

echo preg_match($pattern, $subject);

并且如上所述将输出:

1

即匹配成功。

我不明白为什么。我在这里遗漏了什么?

答案1

好的,这将接受一个请求,/runs/其中 13 个字符的字母数字run参数作为其查询字符串中的唯一内容,删除查询字符串,然后重写为/runs/index.php

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

相关内容