2012-01-16 94 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