1

次の行があります。

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

この URL のディレクトリにアクセスすると: page.php?var1=24&var2=346adf&var3=asdf

それは正規表現をしません。手がかりを持っている人はいますか?

4

3 に答える 3

2

基本的にあなたのルールは間違っています。理由: REQUEST_URI を使用してのみ一致させることRewriteRuleができますが、そこにある QUERY 文字列と一致させることはできません。

コードを次のように変更して正しくします。

RewriteCond %{QUERY_STRING} ^var1=([0-9]+)&var2=[^&]*&var3=.*$ [NC]
RewriteRule ^page\.php/?$ index.php?module=page&var1=%1 [L,NC,QSA]
于 2012-04-05T16:05:40.533 に答える
1

エスケープがないことに加えて、クエリ文字列 ( の後のもの) は一致?の一部ではありません。クエリ文字列で一致させたい場合RewriteRuleは、追加を使用する必要があります。RewriteCond例えば:

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

私はこれをお勧めしません。スクリプトでクエリ文字列を解析することをお勧めします。

于 2012-04-05T16:05:45.967 に答える
1

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

于 2012-04-05T16:03:41.520 に答える