2012-01-16 85 views
0

这是我在我的.htaccess文件中。为什么此模式在匹配preg_match时与RewriteCond中的QUERY_STRING不匹配?

RewriteEngine on 

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

所有我做的是重写QUERY_STRING类似所有QUERY_STRINGrun=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 

即成功的匹配。

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

+0

通过“无所事事”,在这种情况下是否要重写为“http://thinkingmonkey.me/runs/?”? – TerryE 2012-01-16 10:28:48

+0

@TerryE是的。但是,我在这里解决了这个问题。 '%{QUERY_STRING}'不能用作要在'RewriteRule'中匹配和替换的模式。 – ThinkingMonkey 2012-01-16 15:13:07

回答

2

我认为这与第二行有关。尝试将其更改为:

RewriteRule ^(.*) $1? 
+1

+1您不能在RewriteRule模式中使用变量。编写这个正则表达式的更简单的方法是^(。*),因为查询字符串已经从主题中去除了。 – TerryE 2012-01-16 10:32:20

+0

谢谢,我会更新我的答案。 – AlexanderZ 2012-01-23 19:24:17

+0

你忘记了尾随?在替换字符串上;-) – TerryE 2012-01-23 23:02:45