.htaccessでパラメータ付きのURLをリダイレクトさせる

.htaccessでパラメータ付きのURLをリダイレクトさせる

.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の設定はキャッシュされる事が多いです。

中身を書き換えて短いスパンで確認しても、キャッシュが効いている間は変更内容が反映されません。

しばらく時間を置いてから確認すれば良いのですが、それを「設定にミスがある」と勘違いする事が多いのですね。

※極端なお話、何をやっても設定が変わらない状態に陥ります。

間違えないに越した事はありませんが、間違えても焦らず、キャッシュを考慮して時間を掛けておこなうべきです。

この記事をシェアする

一押し人気コーナー紹介