web-dev-qa-db-ja.com

Apacheリダイレクト-すべてのクエリを削除します

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
Primož Kralj

これはディレクトリコンテキストにあるようです。この場合、$1後方参照にはスラッシュプレフィックスが含まれません(RewriteRulepatternが一致する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を単一のドットに変更できます(つまり、.)任意の文字に一致します。

1
MrWhite