Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

リファラを残さずにリダイレクトする

以下、多分絶対確実にバグってます! 修正するの面倒なので修正してませんが!

antipop - IRC Bot で、IRC をもっと便利にしたい」で書いた通り、IRC チャンネル「#順列都市」で話題になった URI のまとめページ的なものを作ったのですが、そこに掲載されているリンクから飛ぶときにリファラが残っちゃうと、リンク先ページ作成者のひとに「どんな話題にされたんだろう?」的に無意味に不審な思いをさせてしまってマズかろうと思い、リファラが残らないよう小細工をしたつもりになってました。

具体的には「ねこめしにっき - 従来型アンテナのつける「謎クエリ」に関して (6) (2004/06/27 - 18:33) 」にて公開されてたスクリプトをそのまんま使ってたんですが、これだと「リファラを隠す」という目的にはそぐわないということがさっき判明しました!(そもそもアンテナのためのリダイレクタなので、リファラを隠す必要ないじゃん!)つーか、「リファラ実験」てとこを読んでたにも関わらず、なぜか「location でぶっとばせばリファラは残らないんだなー」と思い違いをしていました! 反省した! ってんで、以下の通り書きかえ。

#!/usr/bin/env perl

use strict;
use warnings;

my $base         = $ENV{HTTP_REFERER} || '基準となる URL';
my $path_info    = $ENV{PATH_INFO};
my $query_string = $ENV{QUERY_STRING};
my $redirect;

if (!$path_info || $path_info !~ m|https?://.+|) {
	$redirect = $base;
} else {
	($redirect = $path_info) =~ s/.+(https?:\/\/.+)$/$1/;
	$redirect .= "?$query_string" if ($query_string);
} 

print "Refresh: 0; $redirect\n\nRedirecting...";

exit;

あ、でも、実際リファラが消えるかどうかは、確認してないのでわかりません!

他に,リダイレクタとしては ime.nu を通すようにするってなやりくちもあるけど、それじゃクリックする手間が面倒! とかゆってたら p2ime 通せばいいじゃんすか、とか、「HTTP リダイレクタ」なんてのもあるよと教えてもらった。んでも、いずれの方法でも、たぶんブラウザによってはリダイレクトされないとかなんとか不具合が出てくる可能性がある気がするけどおおむねうまく行くような気がしますのでまぁいいやと思った。