妥協したパラメータ付きURLの301リダイレクト

妥協したパラメータ付きURLの301リダイレクト WEB関連

パラメータ付きのURL
例:http://aaa.jp/bbb.html?p=123

これを静的なURL
例:http://ccc.jp/ddd.html

に301リダイレクトするんですが、転送回数が2回になるという妥協した方法を書いてます(汗)

301リダイレクト時の.htaccessの記述

元URLと新URLを見て、301リダイレクトを設定する場合、.htaccessに以下のように記述するかと思います。

Redirect permanent /bbb.html?p=123 http://ccc.jp/ddd.html

で、これを動作させるとリダイレクト先のURLにパラメータが付いてしまうんですね。

こんな感じ
http://ccc.jp/ddd.html?p=123

パラメータを削除できないかと、検索して、何ページか参考になりそうな記事を見たんです。

【.htaccess】パラメータ付きURLからパラメータ付きURLへのリダイレクト設定について|teratail
.htaccessでのリダイレクト設定について、質問です。初歩的な内容でしたらすみません。 現在、.htaccessでリダイレクトを設定しているところなのですが、パラメータ付きURLからパラメータ付きURLへのリダイレクト設定がどうしても分からず、困っています。お力を貸していただければ幸いです。

とか

パラメータ付きURLの301リダイレクト
【今回の経緯】 ・ECサイトリニューアル(2012年7月24日)した。EC-CUBEからEストアーに乗せ変え ・パラメータ付きURLのリダイレクトが上手く行かないので、大体でリダイレクトしてたら順位が落ち始めた。(2012年8月12日) ・やばいと思って、確実にリダイレクト設定をして、無駄なものをrobot.txtでブ...

など。

で、拝見したページを参考に.htaccessを記述して、元URLから遷移させてみると.htaccessに記述する正規表現が悪いのか上手く遷移できなかったんです。

そもそも正規表現とか、よく分からないんですけどね(開き直り)

.htaccessに記述する元URLからパラメータを取ってしまう

元URL⇒http://aaa.jp/bbb.html?p=123
新URL⇒http://ccc.jp/ddd.html

の場合、.htaccessには以下のように書くのが通常パターンでした。

Redirect permanent /bbb.html?p=123 http://ccc.jp/ddd.html

元URLにパラメータがあるので、遷移先URLにパラメータが付いてしまうというのが、先に書いた問題点でした。

 

いろいろ調べた結果、.htaccessに記述していたパラメータを削除すると良いいう結論になりました。

こんな感じ。

Redirect permanent /bbb.html http://ccc.jp/ddd.html

 

どうして、パラメータを削除することにしたかは、このページを見たからです。

.htaccessでパラメータつきのURLをパラメータなしのURLにリダイレクトする方法 - F.Ko-Jiの「一秒後は未来」
最近よくGoogleアラートで見覚えのないページが通知されてきていました。具体的には、このブログのトップページのURLに更新日時がパラメータ(クエリ)としてくっついたものです。(例) …

この記事の途中にパラメータを形式を問わず、パラメータなしのリダイレクトするコードがあったんです。引用して以下にコードを記述します。

RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} !=""
RewriteRule ^(.*)$ /$1? [R=301,L]

こんな感じ。

パラメータを削除した301リダイレクトのコードと、パラメータなしのURLにリダイレクトするコードを同時に書くことで以下のような順序で2回、301リダイレクトが行われます。

元URL:http://aaa.jp/bbb.html?p=123
 ↓
パラメータなし:http://aaa.jp/bbb.html
 ↓
新URL:http://ccc.jp/ddd.html

301リダイレクトがきちんと行われているか確認したい場合は、以下のようなステータスをチェックできるウェブサービスを利用すると良いです。

PC:ステータスコードチェッカー

この手順の場合、元URLのパラメータが複数あっても、前述のコードは変わりません。

http://aaa.jp/bbb.html?p=123
http://aaa.jp/bbb.html?p=456
http://aaa.jp/bbb.html?p=789

こんな感じでパラメータの値だけ違っても、記述するコードは上記のみ、とういことです。

ただ、パラメータの値ごとに、違うURLにリダイレクトしたいという場合は、この記事の方法だと難しいです。

元URLごとに正規表現などを使って.htaccessにコードを記述する必要があるかと思います。