0

VirtualHost に次の構成があります。

RewriteEngine On
RewriteMap mapfile txt:mapfile.txt
RewriteCond ${mapfile:$1?%{QUERY_STRING}} >""
RewriteRule ^/(.+)$ ${mapfile:$1?%{QUERY_STRING}}? [R=301]

これは、この mapfile.txt で問題なく動作します

prueba/code.asp?id=489 /newurl

しかし、この mapfile.txt では一致しません:

prueba/code.asp?id=489 /

書き換えログ:

[07/Dec/2012:20:52:08 +0100] [rid#7f1ac2d4280/initial] (5) map lookup OK: map=mapfile[txt] key=prueba/code.asp?id=489 -> val=/

[07/Dec/2012:20:52:08 +0100] [rid#7f1ac2d4280/initial] (4) RewriteCond: input='/' pattern='>""' => not-matched

なぜ一致しないのですか?クエリの長​​さが "" より大きいかどうかをテストする別の方法はありますか

4

1 に答える 1

0

あなたが期待していることではなく、あなたが求めていることをしているので、一致しません。マップ ルックアップは期待どおりに機能し、効果的に次のようになります。

RewriteCond / >""

ただし、cond 一致文字列演算子は「英数字の並べ替え順序で比較する」ことを意味し、>"" は問題になる可能性があります。regexp を使用しない理由。(少なくとも) 1 文字が含まれている場合に一致します。

RewriteCond ${mapfile:$1?%{QUERY_STRING}} .
于 2012-12-08T02:15:30.083 に答える