Apache-2.2

為什麼此模式與 RewriteCond 中的 QUERY_STRING 不匹配,而在 preg_match 中匹配?

  • January 16, 2012

這是我的.htaccess文件中的內容。

RewriteEngine on

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

我所做的只是重寫QUERY_STRING所有QUERY_STRING類似的run=4f13665700694東西,什麼也不做。網址範例:http://thinkingmonkey.me/runs/?run=4f13665700694. 所以, RewriteCond 應該匹配。但以上不起作用。

但是,模式似乎是正確的。因為,兩者**都使用preg_matchRewriteRulePCRE - 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參數作為其查詢字元串中唯一的內容的請求,剝離查詢字元串,然後重寫為/runs/index.php

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

引用自:https://serverfault.com/questions/350186