.htaccessでパラメータつきのURLをパラメータなしのURLにリダイレクトする方法
最近よくGoogleアラートで見覚えのないページが通知されてきていました。具体的には、このブログのトップページのURLに更新日時がパラメータ(クエリ)としてくっついたものです。
(例) http://blog.fkoji.com/?08271006
こんなURLをこのブログからリンクさせた記憶はなく、アクセスログを調べてみると、とあるサイトからこのパラメータつきのリンクが貼られていることが分かりました。
ただのbotからのアクセスなら構わないのですが、サイトからリンクされているゆえにGooleがインデックスしてしまい、重複コンテンツとなってしまいちょっと困ります。
そこで.htaccessを使ってパラメータなしのURLにリダイレクトさせることにしました。
参考にしたページはこちら。
» .htaccess hack: remove query strings from URLs
具体的には次のようにしました。この例では、パラメータが8桁の数字だった場合に限って、パラメータなしにリダイレクトさせています。
RewriteEngine on RewriteBase / RewriteCond %{QUERY_STRING} ^\d\d\d\d\d\d\d\d$ RewriteRule ^(.*)$ /$1? [R=301,L]
4行目で「$1」の直後に「?」をつけるのがミソで、こうすると「?」だけ残るかと思いきや「?」も取り除かれたURLにリダイレクトされます。
もしもパラメータの形式によらずにパラメータなしのURLにリダイレクトさせたいなら3、4行目は次のように書きます。
RewriteCond %{QUERY_STRING} !="" RewriteRule ^(.*)$ /$1? [R=301,L]
ただしこの書き方では、ページングで「?page=」などのパラメータを利用していた場合などにアクセスできなくなってしまい、あまり推奨できません。
そういう場合には実際に利用しているパラメータだけ対象外とすることもでき、たとえば次のように書きます。
RewriteCond %{QUERY_STRING} !="" RewriteCond %{QUERY_STRING} !^page=.* RewriteRule ^(.*)$ /$1? [R=301,L]
しかし、サイト内で利用されている全てのパラメータを把握するのはなかなか難しいので、なるべくリダイレクトの対象にしたいパラメータに特化して、RewriteCondを記述するほうが望ましいでしょう。
コメントを残す