URL内のすべてのクエリを削除しようとしています:
https://api.myserver.com/image.png?arg=0
はhttps://api.myserver.com/image.png
私はこれを使用しました:
RewriteCond %{QUERY_STRING} ^arg=0$
RewriteRule (.*) $1? [R=permanent]
そしてこれが結果です:
https://api.myserver.com/home/usrn32/domains/myserver.com/public_html/image.png
したがって、パラメータは削除されますが、パスは相対パスではなく絶対パスになります。また、0
だけでなく、すべてのarg
番号を取得したいと思います。
どうやって?
これはディレクトリコンテキストにあるようです。この場合、$1
後方参照にはスラッシュプレフィックスが含まれません(RewriteRule
patternが一致するURLパスにスラッシュが含まれていないため)プレフィックス)なので、相対パス置換と見なされます。 mod_rewriteは、ディレクトリプレフィックス(つまり、/home/usrn32/domains/myserver.com/public_html/
)がrelativeの場合、substitutionに追加し直します。
susbtitutionにスラッシュプレフィックスを明示的に含める(またはRewriteBase
ディレクティブを使用する)必要があります。これにより、相対的ではなくなります。 。例えば:
RewriteRule (.*) /$1? [R=permanent,L]
また、(もしあれば)それ以上の書き換えを防ぐために、おそらくL
フラグを含めたいと思うでしょう。
また、0だけでなく、すべての引数番号をキャッチしたいと思います。
CondPattern(^arg=0$
)を^arg=\d+$
(1桁以上)のように変更します。
要約すれば:
RewriteCond %{QUERY_STRING} ^arg=\d+$
RewriteRule (.*) /$1? [R=permanent,L]
すべてのクエリを削除する
文字通りallクエリ文字列パラメータを削除したい場合は、CondPatternを単一のドットに変更できます(つまり、.
)任意の文字に一致します。