目次
2003年8月12日、この「自宅サーバーWebRing(ウェブリング)」は、サイト全体を引っ越すことになりました。(プロバイダがWAKWAKさんで、Webサーバー単位の静的および動的Webページの引越しです。) 静的なファイルの方は、通常のhtmlファイルにmetaタグを書けば、URLの転送が出来るのですが、動的なCGIファイルの方は、そう容易にURLの転送が出来ません。従って、ここに簡単な覚書を書くことにしました。同じ状況にある方のご参考になれば、幸いです。
旧URL:http://www.ar.wakwak.com/~tns/WebRing.html
新URL:http://park12.wakwak.com/~webring/
において、旧URLのWebRing.htmlを下記の様なファイルにしました。metaタグについては、検索エンジンのことも考慮し、URL変更案内ページについての考察を参考にして、0秒後にいきなり転送することにしました。案内画面を表示するには、10秒以上にした方が良いと考えます。
旧URLのWebRing.htmlの内容
<html> <head> <title>301 Moved Permanently</title> <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"> <meta http-equiv="refresh" CONTENT="0;URL=http://park12.wakwak.com/~webring/"> <meta name="robots" content="INDEX,NOFOLLOW"> </head> <body>0秒後に <a href="http://park12.wakwak.com/~webring/">http://park12.wakwak.com/~webring/</a> に移動します。</body> </html>
注)
動的Webページ(CGIファイル)のURL転送は、引数が動的に変化しますので、この引数も含めてURL転送を行なうことが要点です。
注)?から右の赤字部分は、CGIの引数部分で、URLは動的に変化します。
新URLで、旧URLと同等のCGIが正常に稼動していることを確認しなければなりません。旧CGIが生成するデータも複写(FTP転送等)して正常に動作(表示や書込み)出来ていることを確認することが必要です。
下記のURL転送用CGIを旧URLのCGIの実行パス下にtest.cgiというファイル名で設置して、あらかじめ動作確認を行ないます。本例では、
旧URL:http://www.ar.wakwak.com/~tns/cgi-bin/ring/bbs/test.cgi
というファイル名でURL転送試験を行なっておきます。
旧URLのCGIを停止させ、CGIが生成するデータの更新がない様にします。旧URLのCGIを停止させる最も安直な方法は、旧URLのCGIファイルを一時的に削除することです。
旧CGIが生成するデータを新CGIに複写(FTP転送等)して、動作(表示や書込み)確認を行ないます。
旧URLのCGIファイル名を削除か別のファイル名に変更し、URL転送試験済のtest.cgiを旧URLのCGIファイル名に変更します。
旧URL:http://www.ar.wakwak.com/~tns/cgi-bin/ring/bbs/keijiban.cgi
のkeijiban.cgiを下記の様なファイルにするとURL転送出来ます。私の場合は、CGIで、move.cgiという自宅サーバーWebRing(ウェブリング)のナビゲーション・バー用のURL移動用CGIを使用していますので、下記の旧URLのkeijiban.cgiの内容その2(案内画面を表示せず、いきなり転送する場合)を使用しています。
CGI(Perl)でのURL転送その1
#!/bin/perl
# CGI(Perl)でのURL転送その1
# 引越し先の新URL(引数のない転送先URL)をここに設定
$URLnew = "http://park12.wakwak.com/~webring/cgi-bin/ring/bbs/keijiban.cgi";
# 引数の取得
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $hikisuu, $ENV{'CONTENT_LENGTH'});
} else {
$hikisuu = $ENV{'QUERY_STRING'};
}
# 新URLに引数(転送先URL)を連結
if ( $hikisuu eq "" ) {
$URLmove = $URLnew;
} else {
$URLmove = $URLnew . "?" . $hikisuu;
}
print "Content-type: text/html\n\n";
print <<"HTML";
<html>
<head>
<title>301 Moved Permanently</title>
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
<meta name="robots" content="INDEX,NOFOLLOW">
HTML
if ($ENV{'HTTP_USER_AGENT'} =~ /slurp|msnbot/i) {
# 以下のinktomi系(MSN,Yahoo)のクローラの場合には、
# URLの移転表示のみを行い、URL転送しない。
# Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
# Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)
# Mozilla/3.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)
# msnbot/0.11 (+http://search.msn.com/msnbot.htm)
print <<"HTML";
</head>
<body>アクセスされたURLは、$URLmoveに移転しました。</body>
</html>
HTML
} else {
# URL転送を行なう。
print <<"HTML";
<meta http-equiv="refresh" CONTENT="10;URL=$URLmove">
</head>
<body>10秒後に <a href="$URLmove">$URLmove</a> に移動します。</body>
</html>
HTML
}
exit;
注)
CGI(Perl)でのURL転送その2
#!/bin/perl
# CGI(Perl)でのURL転送その2
# 引越し先の新URL(引数のない転送先URL)をここに設定
$URLnew = "http://park12.wakwak.com/~webring/cgi-bin/ring/bbs/keijiban.cgi";
# 引数の取得
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $hikisuu, $ENV{'CONTENT_LENGTH'});
} else {
$hikisuu = $ENV{'QUERY_STRING'};
}
# 新URLに引数(転送先URL)を連結
if ( $hikisuu eq "" ) {
$URLmove = $URLnew;
} else {
$URLmove = $URLnew . "?" . $hikisuu;
}
if ($ENV{'HTTP_USER_AGENT'} =~ /slurp|msnbot/i) {
# 以下のinktomi系(MSN,Yahoo)のクローラの場合には、
# URLの移転表示のみを行い、URL転送しない。
# Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
# Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)
# Mozilla/3.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)
# msnbot/0.11 (+http://search.msn.com/msnbot.htm)
print "Content-type: text/html\n\n";
print <<"HTML";
<html>
<head>
<title>301 Moved Permanently</title>
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
<meta name="robots" content="INDEX,NOFOLLOW">
</head>
<body>アクセスされたURLは、$URLmoveに移転しました。</body>
</html>
HTML
} else {
# URL転送を行なう。
print "Status: 301 Moved Permanently\n";
print "Content-type: text/html\n";
print "Location: $URLmove\n\n";
}
exit;
注)
以上は、プロバイダのWAKWAKさんのサーバー(OSはFreeBSD 4.8-RELEASE(i386)、ソフトウェアはApache2)だけでした。 WebサーバーのAN HTTPDやApacheの場合は、Locationヘッダだけで、転送できますので、前項までの方法が使用出来ます。 これをWindowsのIISやどのサーバーでも通用する様に書き直したものが、以下のPerlスクリプトです。 このスクリプトは、EasyRINGを参考(reference)にして作成していますので、ご使用される場合、著作権には、十分注意して下さい。
旧URLのsample.cgiを下記の様なファイルにすれば、CGIファイルのURL転送が可能となります。
URL転送用CGI(旧URLのsample.cgiの内容)
#!/usr/local/bin/perl
# CGI(Perl)でのURL転送その2(汎用)
# 引越し先の新URL(引数のない転送先URL)をここに設定
$URLnew = "http://www.example.com/~user/cgi-bin/sample.cgi";
# Locationヘッダが使えないWebサーバーや案内画面を表示する場合は、1にする。
$FlagLocation = 0;
# 引数の取得
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $hikisuu, $ENV{'CONTENT_LENGTH'});
} else {
$hikisuu = $ENV{'QUERY_STRING'};
}
# 新URLに引数(転送先URL)を連結
if ( $hikisuu eq "" ) {
$URLmove = $URLnew;
} else {
$URLmove = $URLnew . "?" . $hikisuu;
}
if ($ENV{'HTTP_USER_AGENT'} =~ /slurp|msnbot/i) {
# 以下のinktomi系(MSN,Yahoo)のクローラの場合には、
# URLの移転表示のみを行い、URL転送しない。
# Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
# Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)
# Mozilla/3.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)
# msnbot/0.11 (+http://search.msn.com/msnbot.htm)
print "Content-type: text/html\n\n";
print <<"HTML";
<html>
<head>
<title>301 Moved Permanently</title>
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
<meta name="robots" content="INDEX,NOFOLLOW">
</head>
<body>アクセスされたURLは、$URLmoveに移転しました。</body>
</html>
HTML
} else {
# URL転送を行なう。
if ($FlagLocation) {
print "Content-type: text/html\n\n";
print <<"HTML";
<html>
<head>
<title>301 Moved Permanently</title>
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
<meta http-equiv="refresh" CONTENT="0;URL=$URLmove">
<meta name="robots" content="INDEX,NOFOLLOW">
</head>
<body>0秒後に <a href="$URLmove">$URLmove</a> に移動します。</body>
</html>
HTML
}else{
if( $ENV{PERLXS} eq "PerlIS" ) {
# IISサーバーの場合
print "HTTP/1.0 301 Moved Permanently\r\n";
} else {
print "Status: 301 Moved Permanently\n";
}
print "Content-type: text/html\n";
print "Location: $URLmove\n\n";
}
}
exit;
注)
基本的には、robots.txtや動的Webページの<meta>タグで、<meta name="robots" content="NOINDEX,NOFOLLOW">を記述すれば良いのです。しかし、この方法ですと、
今まで設置していなかったrobots.txtを急にルートディレクトリに設置してもrobots.txtを確実に(すぐに)クローラが読むのか?(プロバイダのユーザーディレクトリにrobots.txtを設置しても無視される。)
<meta>タグ指定なら、全ての検索エンジンのクローラのデータ収集が拒否される。(CGIが生成する動的Webページ全体のデータ収集が拒否さる。)
ここでは、以下の理由により、動的Webページ(CGIで作成するWebページ)をある特定の検索エンジンのクローラに確実に収集されたくない場合のCGIの改造例を示します。
CGIのURLが管理者用である。(通常は、<meta>タグで、対策。)
CGIの表題(title)がホームページ(Webページ)の表題と同じであり、特定のクローラに収集されるとWebページが検索できなくなる。
CGIの用途がWebRingの様なURL転送をサービスするCGIで、特定のクローラに収集されると本来のWebページが検索できなくなる。
以下の様にPerlへのパス(#!/usr/local/bin/perl)の直下に追加します。
特定の検索エンジンのクローラに収集されたくない場合のCGIの改造例
#!/usr/local/bin/perl
# 以下のinktomi系(MSN,Yahoo)のクローラの場合には、
# URLの移転表示のみを行い、URL転送しない。
# Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
# Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)
# Mozilla/3.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)
# msnbot/0.11 (+http://search.msn.com/msnbot.htm)
if ($ENV{'HTTP_USER_AGENT'} =~ /slurp|msnbot/i) {
print "Content-type: text/html\n\n";
print <<"HTML";
<html>
<head>
<title>403 Forbidden</title>
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
<meta name="robots" content="NOINDEX,NOFOLLOW">
</head>
<body>この画面が表\示されたクローラによるデータ収集は、お断り致します。</body>
</html>
HTML
exit;
}
require './jcode.pl';
・・・省略・・・
注)
このWebページで説明していますCGIファイルのURL転送方法は、自宅サーバーも含めてURL転送に応用可能です。同じWebサーバー内のファイル移動(ディレクトリ移動)にも使用可能です。
このWebページは、私自身(鷹の巣)の必要性に迫られて、作成しました。不明点や不具合点がありましたら、掲示板で、ご指摘願います。
このWebページと同じ内容の様な動的Webページ(CGIファイル)のURL転送方法のWebページが、2003年08月16日以前にございましたら、お知らせ願います。その際は、謝辞にリンクを追記させて頂きます。
Server Response: http://www.ar.wakwak.com/~tns/WebRing.html <--- 旧URLの転送頁
Status: HTTP/1.1 200 OK
Date: Sun, 17 Aug 2003 10:51:29 GMT
Server: Apache/2.0.47 (Unix)
Last-Modified: Wed, 13 Aug 2003 22:45:22 GMT
ETag: "2d89f0-141-2cad6480"
Accept-Ranges: bytes
Content-Length: 321
Connection: close
Content-Type: text/html
Server Response: http://www.ar.wakwak.com/~tns/cgi-bin/ring/bbs/light.cgi <--- 旧URLの転送頁
Status: HTTP/1.1 301 Moved Permanently
Date: Sun, 17 Aug 2003 10:54:21 GMT
Server: Apache/2.0.47 (Unix)
Location: http://park12.wakwak.com/~webring/cgi-bin/ring/bbs/light.cgi <--- 新URLの転送先頁
Content-Length: 0
Connection: close
Content-Type: text/html
上記のHTTP応答ヘッダの状態番号は、Server Header Checkerのサイトより、調べました。 また、状態番号の詳細に付きましては、拙作のWWWサーバーのHTTP ログファイルの読み方の項7の状態番号(ステータスコード)とその説明をご参照願います。検索エンジンのクローラから見ると「301 Moved Permanently」(恒久的な移動)になっていても、Inktomi系の検索エンジンでは、新URLは検索対象外になる可能性があります。
|先頭|自宅サーバーWebRing(ウェブリング)ホームページへ戻る|