アクセス元を取得する

ウェブサイトの訪問者がどこからアクセスしてきたかという情報(アクセス元情報)を取得し、表示を切り替える Perl/CGIプログラムを作成 してみましょう。

訪問者がどこからアクセスしてきたかによりPerl/CGIプログラムの処理を切り替え、適切なメッセージを表示させることはユーザーアクセシビリティーという側面からみても大切なことです。

このウェブサイトでも、 Perl/CGIプログラムで使う文字を16進数に変換するソフトウェア などを公開しています。

このようなソフトウェアをウェブ上に公開していると、外部サイトからPerl/CGIプログラム(公開しているソフトウェア)に直接リンクされることがあります。

気に入っていただけたのであれば、まぁそれでもよいという考え方もありますが…。

だったら、一緒に公開しているウェブページにもリンクを張ってもらいたいものですよね。

ということで、訪問者のアクセス元(どのウェブページのリンクから来たか)を取得し、その後の処理を切り替える Perl/CGIプログラムを作成 してみましょう。

  1. アクセス元の情報を取得
  2. アクセス元により処理を切り替える

アクセス元の情報を取得

アクセス元(リンク元)のURLを取得し表示するPerl/CGIプログラムを作成してみましょう。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print $ENV{'HTTP_REFERER'};
exit;

Perl/CGIプログラムサンプル はこちらに設置してあります。

このPerl/CGIプログラムにアクセスすると、アクセス元(リンク元)のURLを表示します。

なので、上記リンクよりPerl/CGIプログラムサンプルにアクセスした場合は、このウェブページのURLが表示されます。

Perl/CGIプログラムでアクセス元(リンク元)のURLを取得するには、 環境変数 「$ENV{'HTTP_REFERER'}」を参照します。

アクセス元により処理を切り替える

アクセス元(リンク元)により、その後の処理を切り替えるPerl/CGIプログラムを作成してみましょう。

#!/usr/bin/perl

use strict;

if (&RefererCheck) {

print "Content-type: text/html\n\n";
print "OK";

} else {

print "Location: http://kimurashuuichi.com\n\n";

}

exit;


sub RefererCheck {
my $referer = $ENV{'HTTP_REFERER'};

unless ($referer) {return;}
unless ($referer =~ m|^https?://(www\.)?kimurashuuichi\.com|) {return;}

return 1;
}

__END__

Perl/CGIプログラムサンプル はこちらに設置してあります。

このPerl/CGIプログラムは、このウェブサイトのドメイン(kimurashuuichi.com)からアクセスされた場合にのみ「OK」を表示します。

もし、アクセス元(リンク元)の情報を取得できなかった場合や、外部サイトからアクセスされた場合には、このウェブサイトのトップページにジャンプ(リダイレクト)します。

Perl/CGIプログラム解説

このPerl/CGIプログラムサンプルについて説明します。

メイン処理

メイン処理では、RefererCheck関数から返された値を if文で判定 し処理を切り替えています。

サブルーチン RefererCheckは、アクセス元(リンク元)の情報を取得し、自サイトからのリンクであれば1を返し、それ以外では戻り値を返さない関数です。

if文が成立した場合は「OK」を表示させています。

それ以外の場合には、このサイトのトップページに転送(リダイレクト)させています。

訪問者のウェブブラウザをこちらの指定したURLに転送(リダイレクト)させるには、「print "Location: http://kimurashuuichi.com\n\n";」のようにします。

print関数で、「Location:」の後に、転送したいURLを指定し改行「\n」を2回入れます。

このほかにも、 CGIモジュールを使ってURL転送(リダイレクト)させる こともできます。

RefererCheck関数

RefererCheck関数は、環境変数「$ENV{'HTTP_REFERER'}」を参照し、指定したドメインが含まれていれば1を返し、それ以外では何も値を返さない関数です。

このPerl/CGIプログラムサンプルでは、kimurashuuichi.comドメインを含んでいるかどうかを パターンマッチ で調べています。