トップ 最新

ただのにっき

2008-03-14(金) [長年日記]

「Amazon 退会」でググると一位な件

どうもアクセスが多いと思ったら、「Amazon 退会」でググる2003年11月11日の日記が一位だった。退会方法なんて、ツッコミに「メールで」ってあるだけでほとんど何も書いてないのに……。つーか、こないだのmixi規約改定の件といい、どいつもこいつも即座に反応しすぎ。

ちなみに、退会しても購入履歴は残るそうなので、無駄なあがきらしいですよ。

Tags: amazon google

存在しない静的ページへアクセスがあったらその場で生成したいんだが

煮え切らない試行錯誤のメモ。

たとえば、現時点では存在しないページ:

http://example.com/hoge.html

にアクセスがあったとする。でもhoge.htmlは存在しないので、404になる。そこでErrorDocumentディレクティブを使って、CGIのページに飛ばす:

ErrorDocument 404 /cgi-bin/generate.cgi

generate.cgiの中ではファイルhoge.htmlを生成して……さてここからが問題。

素直にLocationヘッダで生成後のhoge.htmlに飛ばしてもうまくいかない:

puts "Location: hoge.html\n\n"

IE7は空っぽの表示になった。ループを検知したのか、キャッシュが悪さをしているのか。そもそも404のままじゃまずいだろ。

じゃあ、generate.cgiのレスポンスをHTMLにして、meta refreshで飛ばしてはどうか:

puts <<-RES
Content-Type: text/html

<html><head>
<meta http-equiv="refresh" content="1;url=hoge.html">
</head></html>
RES

これはうまくいく。でも検索エンジンボットはたどってくれないから、不都合が多い。同様な理由でJavaScriptも採用したくない。

あ、Locationヘッダだけ指定するとステータスが404のままだからダメなのか? 303にしたら、なんかうまくいったんだけど、偶然だろうか*1:

puts <<-RES
Status: 303 Moved Permanently
Location: hoge.html

RES

最終的にブラウザに返るステータスも200なので、これでいいなら楽だなぁ。RFCだけだとよくわからん。ぜったい誰かがやってるはずなので、ベストプラクティスがあるに違いないのだが。

続く。

*1 wgetはなぜか303でエラーだと言ってるが。IE7、Firefox、w3mはちゃんと移動してくれる。