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

パラメータ付きの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

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

teratail.com

とか

welcart.seesaa.net

など。

で、拝見したページを参考に.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

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

https://blog.fkoji.com/2011/08281849.html

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

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

neoinspire.net

この手順の場合、元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にコードを記述する必要があるかと思います。