yourname.yeah.net などの短縮ドメイン名を使用すると、誰もが非常に便利だと感じます。自分のサーバーで短縮ドメイン名を実装できればと考えている人は多いでしょう。実際には複雑ではありません。この記事を読んだ後は、短縮ドメイン ネーム システムを作成することもできます。
短縮ドメイン名システムのキーテクノロジーは、Webページのリダイレクト(リディレクトリ)を実現することです。本質的に、短縮ドメイン名システムと仮想マシン システムはまったく異なります。仮想ドメイン名と仮想マシンの IP の間には 1 対 1 の対応関係があります。短縮ドメイン名システムでは、ドメイン名と IP を 1 対 1 でマッピングする必要はありません。つまり、複雑なドメイン名解決メカニズムや仮想マシンを必要とせず、yourname.somedomain をリクエストすると、HTML ページを最初に保存した場所にブラウザーがリダイレクトされます。
より完全に説明するために、次の凡例を示します:
私が提供するソース プログラムは実行環境です: RedHat 5.1 Linux 上の Apache1.3.6 Web サーバー + PHP3 言語。 プログラムを作成する前に、まずサーバーをセットアップする必要があります。まず、Apache サーバーが php3 をサポートするようにします。 ftp.redhat.com にアクセスして mod_php-2.0.1-9.i386.rpm をダウンロードします。インストール後、/etc/httpd/conf/http.conf ファイルを変更し、#LoadModule php3_module の前にある # コメント番号を削除します。 /etc にもある文 /httpd/conf/srm.conf ファイル内の #AddType application/x-httpd-php3 .php3 の前にあるコメント番号を削除し、DirectoryIndex 項目の後にindex.php3 を追加します。 Apache サーバーを再起動します。この時点で、サーバーは標準の php3 言語スクリプト ファイルをサポートし、index.php3 をデフォルトのホームページとして使用できます。
汎ドメイン名を解決できるように DNS サーバーを設定します。一般的な Unix および Linux システムの DNS 解決は、Bind4 および Bind8 の設定ファイルはそれぞれ /etc/named.boot および name.conf であり、設定中にシステムに応じて変更します。バインド設定ファイル /etc/named.boot を設定し、「primary domain.com db.domain」という文を追加し、新しいドメイン レコードを追加します。 /etc/name.conf に追加します:
ゾーン "domain.com" { type master;
file "db.domain";
/var/name/ に新しいマスター ドメイン レコード ファイル db.domain を作成します。その形式は次のとおりです: N SOA dns.domain.com root.domain.com (
199811291 ; Serial
28800 ; リフレッシュ
7200 ; 再試行
604800 ; 期限切れ
86400) ; 最小
dns
MX 10 dns.domain.com
dns A 202.115.135.50
www A 202.115.135.50
/usr/sbin/ndc reload を実行して、ドメイン名データベースを再ロードします。この時点で、ドメイン内の任意のホスト (マークされているホストを除く) に ping を実行し、すべてが指定された IP をポイントするようにする必要があります。これで、DNS サーバーの設定が完了します。
最後のステップは、PHP3 スクリプトをコンパイルすることです。全体の原理を図で詳しく説明したので、リダイレクト プログラムを書くのは難しくありません。
IE5.0 によって送信される完全な HTTP ヘッダー情報を見てみましょう:
Accept: application/vnd.ms-excel、application/msword、application/vnd.ms-powerpoint、image/gif、image/ x-xbitmap、image/jpeg、image/pjpeg、*/*
Accept-Encoding: gzip、deflate
Accept-Language: zh-cn
Connection: Keep-Alive
Host:ww.yahoo.com
User-Agent: Mozilla/4.0 (互換性; MSIE 5.0b1; Windows 98) HTTP ヘッダー情報全体からホスト情報を取り出し、それを http://www.jj.jx.cn/www.xxx の形式に変更する必要があります。 .xxx/default.htm 最初の部分「www」、つまりHostName(つまりユーザーが登録した名前)を別途取り出して、リダイレクト検索のキーワードとして使用します。
ユーザーの登録URL情報を取得した後、リダイレクトコマンド「Localtion: http://www.jj.jx.cn/somewhere/sample.html」をユーザーのブラウザに送信し、ユーザーを指定されたページにリダイレクトします。
PHP3には、ブラウザから送信されたHTTPヘッダー情報を取得する関数GetAllHeader()があります。主にこの関数を使用してプログラム全体を完成させる必要があります。
ソースプログラムは最後に添付されていますが、あくまで実験的なものなので、ユーザー情報を問い合わせる際にはデータベースは使用しません。システム全体を実用化する場合は、データベースに接続する必要があります。ユーザー情報を照会するプロセスは非常に長く、効率に大きく影響し、ユーザーデータの管理は不便です。 (スペースの都合上、登録・管理に必要な書き込み・記録手順は記載しておりません。ご自身で追加してください。)
ソースプログラムでは、すべてのユーザー情報が data サブディレクトリー下の user.dat ファイルに記録されます。その形式は:
ユーザー名:
http://octopus.cdit.edu.cn/~qap213/index.html
添付PHP3源程序:
//HTTPのヘッダを取得して解析する//
$headers = getallheaders();
while (list($header, $value) = each($headers)) {
if($header=="Host"){$username= strtok($value,".");}}
//バナーのウィンドウから飛び出す//
echo '';
// ユーザー情報を求める記録されたファイルから//
if(!$usrinfo=file("data/user.dat")){echo "Open Data File Error!!";}
$url="http://" ;
for($i=0;$i
if(strtok($usrinfo[$i],":")==$username){
$url=$usrinfo[$i+1];
}
if($url=="http://"){echo "データの uesrname が見つかりません!";}
else{
echo '';}
?>