同じコンテンツを指す複数のURLをクローラーが来たときだけ一つにまとめる
2007-06-02-1
[Programming]
amazon がやってるみたいに「同じコンテンツを指す複数のURLを、クローラーが来たときだけ正規化した一つのURLにリダイレクト」したい。
そこで「.htaccess」に以下のように記述した。
普通にブラウザから
クローラがアクセスすると
とりあえず実現できたものの、なんか釈然としないなあ、
と思い「Apacheクックブック」を引っ張り出して見てみると
もっとシンプルな方法が載っていた。
それ見て書き直し。
RewriteRule の "[R]" でリダイレクトするだけ。
勉強になるなあ。
■Apacheクックブック - Webサーバ管理者のためのレシピ集
そこで「.htaccess」に以下のように記述した。
RedirectMatch ^/bot/([0-9A-Z]{10})/ http://example.com/asin/$1/ RewriteEngine On RewriteRule ^asin/([0-9A-Z]{10})/$ go.cgi?asin=$1 [L] RewriteCond %{HTTP_USER_AGENT} bot|ahoo|craw|spid [NC] RewriteRule ^asin/([0-9A-Z]{10})/(.+-22)/$ bot/$1/ RewriteRule ^asin/([0-9A-Z]{10})/(.+-22)/$ go.cgi?asin=$1&aid=$2 [L]
普通にブラウザから
http://example.com/asin/00000000/yto-22/にアクセスすると
http://example.com/go.cgi?asin=00000000&aid=yto-22が実行される。
クローラがアクセスすると
http://example.com/bot/00000000/にリダイレクトされ、それが
http://example.com/asin/00000000/にリライトされ、最終的に
http://example.com/go.cgi?asin=00000000が実行される。
とりあえず実現できたものの、なんか釈然としないなあ、
と思い「Apacheクックブック」を引っ張り出して見てみると
もっとシンプルな方法が載っていた。
それ見て書き直し。
RewriteEngine On RewriteRule ^asin/([0-9A-Z]{10})/$ go.cgi?asin=$1 [L] RewriteCond %{HTTP_USER_AGENT} bot|ahoo|craw|spid [NC] RewriteRule ^asin/([0-9A-Z]{10})/(.+-22)/$ /asin/$1/ [R=301] RewriteRule ^asin/([0-9A-Z]{10})/(.+-22)/$ go.cgi?asin=$1&aid=$2 [L]
RewriteRule の "[R]" でリダイレクトするだけ。
勉強になるなあ。
■Apacheクックブック - Webサーバ管理者のためのレシピ集
この記事に言及しているこのブログ内の記事