.htaccessでパラメータ付きのURLをリダイレクトさせる
.htaccessでリダイレクトさせる際、通常パラメータ値はそのまま維持して転送されます。
パラメータ値を維持しない場合は、転送先URLの末尾に「?」を付けましょう。
QUERY_STRINGを使えば、特定パラメータ値を条件としたリダイレクトができます。
.htaccessでパラメータ付きのURLをリダイレクトさせる
.htaccessによるリダイレクトの方法については何度か紹介をしました。
今回は補足情報として、パラメータが付いたURLの転送方法をご紹介します。
Wordpressでパーマリンクなどを未設定にしていると、urlの末尾に「?○○=●●●」などの文字列がつく事がありますよね。
他にEccubeショッピングカートシステムの商品一覧ページなども「?category_id=●●●」とパラメータが付く傾向にあります。
必要な場合は、適切にリダイレクトする様にしましょう。
パラメータ付きURLのリダイレクト
パラメータを引き継ぐ場合
以下の方法の場合、パラメータ情報をそのまま引き継いで指定URLへリダイレクトします。
RewriteEngine On RewriteRule ^test(.*) https://lpeg.info/drone [L,R=301]
上記の場合test/?cat=1を開くと、/drone/?cat=1 へ飛ぶ訳です。
https://lpeg.info/blog/?cat=123
https://lpeg.info/drone/?cat=123
上記の様にどのようなパラメータ値を入れても、そのまま継承して転送されます。
パラメータ値が入っても入らなくても、同じ結果になる事に注意しましょう。
パラメータを引き継がない場合
パラメータを引き継がないようにするには、リダイレクト先URLの後ろにクエスチョンマーク「?」を追加します。
RewriteEngine On RewriteRule ^test(.*) https://lpeg.info/drone? [L,R=301]
これによりリダイレクト時にパラメータ値部分は消えます。
https://lpeg.info/blog/?cat=1
https://lpeg.info/drone/
この様に、?cat=1の部分は継承されません。
パラメータ値が入っても入らなくても、転送結果は同じです。
固有パラメータを条件としたリダイレクト
パラメータが「p=1」となっている場合にのみ、リダイレクトするタイプです。
これを制御しているのが「QUERY_STRING」の部分ですね。
ここで設定されたパラメータ値以外では、リダイレクトはされません。
条件一致リダイレクト
RewriteEngine On RewriteCond %{QUERY_STRING} ^p=1$ RewriteRule ^test/$ https://lpeg.info/category [L,R=301]
test/?p=1の時のみ、パラメータ値はそのまま/drone/?p=1としてリダイレクトされます。
https://lpeg.info/blog/?p=1 のみ
https://lpeg.info/category/?p=1
それ以外のパラメータ値の時はリダイレクトされません。
複数ある場合はパラメータごとにリダイレクト先を決定する必要があるでしょう。
継承させないなら「?」を付ける
前回同様パラメータ値を引き継がないようにする場合は、転送先の末尾droneの後ろに「?」をつけます。
RewriteEngine On RewriteCond %{QUERY_STRING} ^p=1$ RewriteRule ^test/$ https://lpeg.info/category? [L,R=301]
そうするとp=1の時だけ、パラメータ値無しのhttps://lpeg.info/category/ へ転送されます。
日本語パラメータの場合
日本語がパラメータに利用されてる場合は、URLエンコードを使って別の文字に変換しましょう。
日本語をエンコードする
エンコードされた文字であればブラウザが判断できるようになります。
例えば「あ」なら「%E3%81%82」です。
「田中」という名前ならば「%E7%94%B0%E4%B8%AD」になります。
これを踏まえてエンコードした状態で記述してみましょう。
エンコードの文字列を条件に設定
RewriteEngine On RewriteCond %{QUERY_STRING} ^name=%E7%94%B0%E4%B8%AD RewriteRule ^test/$ https://lpeg.info/tanaka? [L,R=301]
https://lpeg.info/blog/?name=田中
https://lpeg.info/tanaka/
上記はname値が「田中」の場合、tanaka/ディレクトリに転送が掛かります。
エンコード変換サイト
以下のサイトを使って日本語を一旦エンコードしてから利用して下さい。
.htaccessを試す際の注意
サーバーによると思いますが、.htaccessの設定はキャッシュされる事が多いです。
中身を書き換えて短いスパンで確認しても、キャッシュが効いている間は変更内容が反映されません。
しばらく時間を置いてから確認すれば良いのですが、それを「設定にミスがある」と勘違いする事が多いのですね。
※極端なお話、何をやっても設定が変わらない状態に陥ります。
間違えないに越した事はありませんが、間違えても焦らず、キャッシュを考慮して時間を掛けておこなうべきです。