2012-01-16 8 views
0

ここに私の.htaccessファイルの内容があります。なぜこのパターンはpreg_matchで一致する間、Re​​writeCondのQUERY_STRINGと一致しませんか?

RewriteEngine on 

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

私がやっているすべてはrun=4f13665700694に似たすべてのQUERY_STRINGためQUERY_STRINGを書き換えると何もしませんさ。 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

+0

@TerryEはい。しかし、私はここで問題を解決しました。 '%{QUERY_STRING} 'は' RewriteRule'で照合&置換するパターンとして使用できません。 – ThinkingMonkey

答えて

2

2番目の行とは関係があります。

RewriteRule ^(.*) $1? 
+1

+1 RewriteRuleパターンで変数を使用することはできません。そして、この正規表現を書くより簡単な方法は、クエリー文字列がすでにサブジェクトから取り除かれているので、^(。*)です。 – TerryE

+0

ありがとう、私は私の答えを更新します。 – AlexanderZ

+0

あなたは末尾を忘れていますか?置換文字列;-)について – TerryE

関連する問題