2012-04-05 6 views
1

私は次の行を持っている:私はこのURLでディレクトリにアクセスすると.htaccessのこの正規表現が一致しないのはなぜですか?

RewriteRule ^page.php?var1=([0-9]+)&var2=(.*)&var3=(.*)$ index.php?module=page&var1=$1 

を:?page.php VAR1 = 24 & var2の= 346adf & VAR3 =

空自それは正規表現を行うdoesntの。誰か手がかりを持っている?

答えて

2

基本的にルールは正しくありません。理由:RewriteRuleを使用してREQUEST_URIを一致させることはできますが、そこにはQUERY文字列を一致させることはできません。

はそれが正しいにするために、このようにコードを変更し

RewriteCond %{QUERY_STRING} ^var1=([0-9]+)&var2=[^&]*&var3=.*$ [NC] 
RewriteRule ^page\.php/?$ index.php?module=page&var1=%1 [L,NC,QSA] 
+0

ありがとうございます! – dirk

+0

^page \ .php /?$ be^page \ .php \?$ –

1

最初に気づくのは、?おそらくエスケープする必要があります。

1

エスケープを欠落しているだけでなく、クエリ文字列(?後のもの)はRewriteRuleマッチングの一部ではありません。 クエリ文字列を照合する場合は、追加のRewriteCondを使用する必要があります。 例:

RewriteCond %{QUERY_STRING} ^foo=([^&]+)&bar$ 
RewriteRule ^page\.php$ otherpage.php?x=%1 [QSA] 

これはお勧めできません。スクリプト内のクエリ文字列を解析する方がよいでしょう。

+0

http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecondも参照してください。 – Qtax