作成日:2003年8月14日、改定日:2004年06月27日 リング管理者:鷹の巣

サイト全体の引越し(URL転送)についての覚書

目次

  1. 概要
  2. 静的Webページ(htmlファイル)のURL転送方法
  3. 動的Webページ(CGIファイル)のURL転送方法
  4. 汎用性を持たせた動的Webページ(CGIファイル)のURL転送方法
  5. 検索エンジンのクローラに収集されたくない場合のCGIの改造例
  6. その他

    更新履歴  謝辞

1. 概要

2003年8月12日、この「自宅サーバーWebRing(ウェブリング)」は、サイト全体を引っ越すことになりました。(プロバイダがWAKWAKさんで、Webサーバー単位の静的および動的Webページの引越しです。) 静的なファイルの方は、通常のhtmlファイルにmetaタグを書けば、URLの転送が出来るのですが、動的なCGIファイルの方は、そう容易にURLの転送が出来ません。従って、ここに簡単な覚書を書くことにしました。同じ状況にある方のご参考になれば、幸いです。

2. 静的Webページ(htmlファイル)の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>

注)

  1. 太字は、引越し先の新URLで、URL毎に異なります。
  2. 尚、旧URLのHTTP応答ヘッダの状態は、200 OK 脚注1 でした。

3. 動的Webページ(CGIファイル)のURL転送方法

動的Webページ(CGIファイル)のURL転送は、引数が動的に変化しますので、この引数も含めてURL転送を行なうことが要点です。

説明として、以下のURLを使用します。
旧URL:http://www.ar.wakwak.com/~tns/cgi-bin/ring/bbs/keijiban.cgi?cmd=get&id=999
新URL:http://park12.wakwak.com/~webring/cgi-bin/ring/bbs/keijiban.cgi?cmd=get&id=999

注)?から右の赤字部分は、CGIの引数部分で、URLは動的に変化します。

動的Webページ(CGIファイル)のURL転送手順

  1. 新URLで、旧URLと同等のCGIが正常に稼動していることを確認しなければなりません。旧CGIが生成するデータも複写(FTP転送等)して正常に動作(表示や書込み)出来ていることを確認することが必要です。

  2. 下記のURL転送用CGIを旧URLのCGIの実行パス下にtest.cgiというファイル名で設置して、あらかじめ動作確認を行ないます。本例では、
    旧URL:http://www.ar.wakwak.com/~tns/cgi-bin/ring/bbs/test.cgi
    というファイル名でURL転送試験を行なっておきます。

  3. 旧URLのCGIを停止させ、CGIが生成するデータの更新がない様にします。旧URLのCGIを停止させる最も安直な方法は、旧URLのCGIファイルを一時的に削除することです。

  4. 旧CGIが生成するデータを新CGIに複写(FTP転送等)して、動作(表示や書込み)確認を行ないます。

  5. 旧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(案内画面を表示せず、いきなり転送する場合)を使用しています。

URL転送用CGI(旧URLのkeijiban.cgiの内容)その1(10秒程度案内画面を表示する場合)

 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;

注)

  1. 太字は、設置する引越し元のperlへのパスや引越し先の新URLで、使用環境毎に異なります。
  2. inktomi系(MSN,Yahoo)の検索エンジンの場合、URL転送すると登録URLが転送元のURLになる為、URL転送しない。

URL転送用CGI(旧URLのkeijiban.cgiの内容)その2(案内画面を表示せず、いきなり転送する場合)

 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;

注)

  1. 太字は、設置する引越し元のperlへのパスや引越し先の新URLで、使用環境毎に異なります。
  2. inktomi系(MSN,Yahoo)の検索エンジンの場合、URL転送すると登録URLが転送元のURLになる為、URL転送しない。
  3. 尚、旧URLのHTTP応答ヘッダの状態は、301 Moved Permanently 脚注2でした。

4. 汎用性を持たせた動的Webページ(CGIファイル)のURL転送方法

以上は、プロバイダのWAKWAKさんのサーバー(OSはFreeBSD 4.8-RELEASE(i386)、ソフトウェアはApache2)だけでした。 WebサーバーのAN HTTPDやApacheの場合は、Locationヘッダだけで、転送できますので、前項までの方法が使用出来ます。 これをWindowsのIISやどのサーバーでも通用する様に書き直したものが、以下のPerlスクリプトです。 このスクリプトは、EasyRINGを参考(reference)にして作成していますので、ご使用される場合、著作権には、十分注意して下さい。

説明として、以下のURLを使用します。
旧URL:http://www.example.net/~user/cgi-bin/sample.cgi
新URL:http://www.example.com/~user/cgi-bin/sample.cgi

旧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;

注)

  1. 太字は、設置する引越し元のperlへのパスや引越し先の新URL等で、使用環境URL毎に異なります。
  2. inktomi系(MSN,Yahoo)の検索エンジンの場合、URL転送すると登録URLが転送元のURLになる為、URL転送しない。

5. 検索エンジンのクローラに収集されたくない場合のCGIの改造例

基本的には、robots.txtや動的Webページの<meta>タグで、<meta name="robots" content="NOINDEX,NOFOLLOW">を記述すれば良いのです。しかし、この方法ですと、

ここでは、以下の理由により、動的Webページ(CGIで作成するWebページ)をある特定の検索エンジンのクローラに確実に収集されたくない場合のCGIの改造例を示します。

以下の様に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';
・・・省略・・・

注)

  1. 太字は、設置するCGIの元のソースリストの例で、使用するCGIで異なります。
  2. 本例では、inktomi系(MSN,Yahoo)の検索エンジンの場合、データ収集の拒否を行なっています。
  3. CGIの用途がWebRingの様なURL転送をサービスするCGIで、クローラのデータ収集を拒否する場合、<title>タグ内は、「403 Forbidden」を「303 See Other」とし、<body>タグ内は、「要求された情報は、別のURIに存在します。この画面が表\示されたクローラによるデータ収集は、お断り致します。」に変更した方が良いと考えます。

6. その他

  1. このWebページで説明していますCGIファイルのURL転送方法は、自宅サーバーも含めてURL転送に応用可能です。同じWebサーバー内のファイル移動(ディレクトリ移動)にも使用可能です。

  2. このWebページは、私自身(鷹の巣)の必要性に迫られて、作成しました。不明点や不具合点がありましたら、掲示板で、ご指摘願います。

  3. このWebページと同じ内容の様な動的Webページ(CGIファイル)のURL転送方法のWebページが、2003年08月16日以前にございましたら、お知らせ願います。その際は、謝辞にリンクを追記させて頂きます。


脚注1)旧URL転送頁のHTTP応答ヘッダの状態番号は、「200 OK」(正常応答)です。
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
脚注2)旧URL転送頁のHTTP応答ヘッダの状態番号は、「301 Moved Permanently」(恒久的な移動)です。
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(ウェブリング)ホームページへ戻る


2003年8月14日よりページカウンタ頁配送。