書き換えはどうすればいいですか。
http://www.example.com/?aff=number
に:
http://www.example.com
URL内の他のパラメータの数に関係なく、aff=x
のすべてのインスタンスを削除します。
URL内の他のパラメータの数に関係なく、
aff=x
のすべてのインスタンスを削除します。
他のURLパラメータを(任意の順序で)keepし、単純にaff=number
パラメータを削除すると仮定すると、ルートの.htaccess
ファイルでmod_rewriteを使用して次のようなことができます。
RewriteCond %{QUERY_STRING} ^(.*&|)aff=\d+(?:&(.*)|)$
RewriteRule (.*) /$1?%1%2 [R=302,L]
これは既存のWordPressディレクティブをbeforeする必要があります。
これはaff
パラメータが存在する場合、それは数字と少なくとも1桁の値を持つことを前提としています。
$1
は、キャプチャされたRewriteRule
patternへの後方参照です。ですから、これはあなたの例のように、ドキュメントのルートだけでなく、あらゆるURLパスを扱います。
%1
と%2
は、前のCondPatternでキャプチャされたグループへの後方参照です。 %1
はbefore削除されるパラメータで、%2
はafterです。どちらもオプションです。
302
(一時的)リダイレクトを301
(永続的)に変更します。これが正常に機能していることを確認した後でのみ(これが永続的であることを意図している場合)。
他のURLパラメータ(保持したいもの)にURLエンコード(%エンコード)値が含まれている場合は、NE
(noescape
)フラグをRewriteRule
ディレクティブに追加して、これらの文字が二重にエンコードされないようにします。 置換。例えば:
RewriteRule (.*) /$1?%1%2 [NE,R=302,L]
QUERY_STRING
サーバー変数は、Apacheによって%デコードされていません。通常、mod_rewriteは応答をクライアントに返す前にsubstitutionをURLエンコードします。しかし、これはクエリ文字列からキャプチャしたエンコード済みの文字を二重にエンコードします。 NE
フラグはこれが起こるのを防ぎます。
この質問では、 "number"を含むaff
というURLパラメータを削除することについて具体的に説明しました。一般に、正規表現を扱うときはできるだけ具体的にするべきですが、削除するURLパラメータにanythingを含めることができる場合は、CondPatternを次のように変更します。
^(.*&|)aff=.*?(?:&(.*)|)$
- 欲張りでない0文字以上の一致。^(.*&|)aff=[^&]*(?:&(.*)|)$
- &
(URL parameter delimiter)以外のものに0回以上一致します。これらの両方の正規表現における重要な点は、マッチングされるvalueがcaptureではないということです。普通の括弧で囲まないでください。
要約すれば:
RewriteCond %{QUERY_STRING} ^(.*&|)aff=[^&]*(?:&(.*)|)$
RewriteRule (.*) /$1?%1%2 [NE,R=302,L]