2017-08-21 14 views
2

私がURLと一致するようにしようと、私はhttp://example.com/?bloginfo=racing301ルート上のクエリ文字列のリダイレクト?

Redirect 301 "/?bloginfo=racing" http://example.com/racing 

または

RedirectMatch 301 ^/?bloginfo=racing$ http://example.com/racing 

、例えば、条件の意志をルート上のクエリ文字列といくつかのURLをリダイレクトしようとしているの複数の方法を試してみました決して一致しない。私の.htaccessファイルの内部に、この種のリダイレクトを書き込むための良い方法はありますか?

答えて

3

問合せ文字列と一致させる場合は、mod_rewriteを使用し、RewriteCondディレクティブのQUERY_STRINGサーバー変数をチェックする必要があります。 mod_aliasディレクティブ(つまり、RedirectRedirectMatchは、クエリ文字列ではなくURLパスにのみ一致します)。あなたが何かを行うことができhttp://example.com/?bloginfo=racinghttp://example.com/racing

たとえば、次のようにリダイレクトする:

RewriteEngine On 

RewriteCond %{QUERY_STRING} ^bloginfo=racing$ 
RewriteRule ^$ /racing? [R=302,L] 

置換の末尾?はそうでない場合、リクエストからクエリ文字列を除去するために必要とされ、ターゲットURLに渡されます。あるいは、Apache 2.4でQSDフラグを使用してください。

キャッシュが問題を起こさないようにするために、正常に動作することが確認されている場合にのみ、302(一時的)から301(永続的)に変更してください。そして、あなたは、次のような何かを行うことができ、これは、より汎用的にすると/<something>/?bloginfo=<something>をリダイレクトする

RewriteCond %{QUERY_STRING} ^bloginfo=([^&]+) 
RewriteRule ^$ /%1? [R=302,L] 

%1は最後の試合CondPatternのでキャプチャサブパターンへの後方参照です。

+1

これはまさに私が探していたとして。非常に教育的です。どうもありがとうございます! –

1

クエリ文字列は、リクエストURIとは別の変数であるので、あなたはこのような何かをする必要があります。

RewriteEngine On 
RewriteCond %{QUERY_STRING} bloginfo=racing 
RewriteRule ^$ /racing [L,R] 
関連する問題