7

私のクライアントは、特定のページで (% を A に変更することによって) 変更されたクエリ文字列を望んでいます。

たとえば、次の方法で目的のページのクエリ文字列を完全に削除できます。

RewriteCond %{QUERY_STRING} !="" 
RewriteCond %{REQUEST_URI} ^/SpecialPage(.*) 
RewriteRule ^(.*)$ /$1? [R=301,L] #remove query string

これは、クエリ文字列の % を削除して A に置き換える必要があると私が考えたものですが、そうではありません:

RewriteCond %{QUERY_STRING} ^(.*)\%(.*)$
RewriteCond %{REQUEST_URI} ^/SpecialPage(.*)
RewriteRule ^(.*)$ /$1?%1A%2  [L]

これで何が間違っていますか?私はそれを完全に見つけることができません。専門家の目をありがとう!

4

2 に答える 2

1

あなたは本当に近いです。

ここでの問題は、条件があり、ルールの一致が一緒でなければならないことです。前への後方参照は、 REQUEST_URI用であり、必要なQUERY_STRING用ではないRewriteCondため、壊れています。

RewriteCond %{REQUEST_URI} ^/SpecialPage(.*)
RewriteRule ^(.*)$ /$1?%1A%2  [L]

ここで、%1後方参照はURI(.*)の末尾にある と一致します。/SpecialPageクエリ文字列の一致からの後方参照が失われ、それが本当に必要なものです。条件を組み合わせて、REQUEST_URI を次の正規表現パターンと一致させることができますRewriteRule

RewriteCond %{QUERY_STRING} ^(.*)\%(.*)$
RewriteRule ^SpecialPage(.*)$ /SpecialPage$1?%1A%2  [L]

ここで、%1および%2後方参照はクエリ文字列を正しく参照しておりSpecialPage、URI の条件は正規表現パターンによって満たされています。

于 2012-07-11T03:43:55.297 に答える