PHP程式:虛擬網域名稱服務 (DNS)DIY

來源:互聯網
上載者:User

簡介:這是PHP程式:虛擬網域名稱服務 (DNS)DIY的詳細頁面,介紹了和php,有關的知識、技巧、經驗,和一些php源碼等。

class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=324802' scrolling='no'>

編者按:用過網易的my.yeah.net網域名稱轉向服務的朋友們一定都對它的強大功能感興趣不已吧?只要申請了自己的虛擬網域名稱,如coolfish.yeah.net,以後無論自己的真實網址如何變化,訪問者都能使用這個虛擬網域名稱準確訪問到自己的網站,真的很方便。其實,虛擬網域名稱並不複雜。如果你有一點網路編程的基礎,再看完本文,你也可以自己實現虛擬網域名稱服務 (DNS),過一把ISP的癮。

  在網際網路飛速發展的今天,各式各樣的網路服務層出不窮。今天我們要探索的虛擬網域名稱服務 (DNS)就是現在眾多免費午餐中的一道大菜。

虛擬網域名稱是什嗎?

  虛擬網域名稱服務 (DNS)是伴隨著免費個人首頁空間的出現而開始流傳的。中國的個人首頁服務始於1996年初,隨後便出現了湛江“碧海銀沙”、網易個人首頁基地等許多較大規模的個人首頁空間服務,個人首頁曾一度盛行,為中國網際網路的普及和發展做了很重要的鋪墊。但是由於諸如www.nease.net/~myname等式樣的網址在形式上比較複雜,難以記憶,於是將這種煩瑣的地址轉換成myname.yeah.net等簡潔形式的虛擬網域名稱服務 (DNS)便應運而生。

  我們知道,常見的網域名稱有.com、.net等多種,類似5945.net的網域名稱,我們就稱為頂級網域名稱,也是需要付費的網域名稱,而諸如abc.5945.net形式的網域名稱,我們就常稱為第三層網域名,可以由使用者本身定義,無需付費。所謂的虛擬網域名稱通常是在第三層網域名或多級網域名稱上做文章,虛擬網域名稱服務 (DNS)的任務就是將簡單而容易記憶的三級或多級網域名稱重新導向到一個相對複雜而不易記憶的URL地址,該服務的意義也即在於此。

泛網域名稱是什嗎?

  熟悉NT的蝦米都知道,如果要在NT上設定三級、多級網域名稱,首先需要設定DNS伺服器,讓形如abc.5945.net的網域名稱能夠解析到我們指定的主機IP地址上,然後我們需要設定該主機的IIS(Internet Information Server),讓該第三層網域名能訪問對應URL地址。由此可見這個過程並不複雜,然而需要對各台主機有相應的配置許可權,顯然這是不可能的;同時,提供大量而密集的服務時,設定過程顯得緩慢而煩瑣。那麼真正的虛擬網域名稱服務 (DNS)是怎樣實現的呢?答案很簡單:使用泛網域名稱。

  泛網域名稱類似於DOS下的萬用字元,比如你在DNS中建立一個名為*.5945.com的泛網域名稱,則所有如www.5945.net、abc.5945.net、ftp.abc.5945.net等形式的網域名稱都不用在DNS中另行設定而“自動生效”,它們在被DNS解析時均會指向建立此泛網域名稱時所指定的同一個IP地址。這樣,我們只需要為我們的主網域名稱申請一個泛網域名稱解析服務,網域名稱解析問題就迎刃而解了,而且被解析到同一個IP地址,那麼我們所要做的就是在這個IP地址所對應主機的預設WEB頁面上做文章,讓不同的子網域名稱進行URL重新導向,轉到它們所希望的URL網址上去。這裡需要說明的是,每台提供WEB服務的主機都有一個預設的WEB服務,如果一個網域名稱被解析到該主機,而在WEB伺服器軟體中沒有設定其對應文檔目錄時,對該網址的請求即被提交給預設WEB服務,這是我們虛擬網域名稱服務 (DNS)的基本流程,同時也說明,一台主機只能提供一個虛擬機器主機服務。

常式解析:

  我們以PHP程式為例來介紹這個過程。

  假設我們需要提供網域名稱為5945.net的虛擬網域名稱服務 (DNS),5945.net主機所預設的WEB服務的預設文件為index.php(預設文件頁面名可以由WEB Server設定),那麼該頁面程式就應負責將abc.5945.net重新導向到我的免費空間,比如:www.netease.com/~abc/default.htm。那麼,我們的程式首先需要分析使用者所訪問的第三層網域名是什麼。
index.php:

  $domain=$SERVER_NAME; //取得使用者所訪問的網域名稱全稱

  $domain=eregi_replace('.5945.net', ', $domain); //截取網域名稱全稱,擷取使用者所要訪問的第三層網域名,擷取所訪問的網域名稱全稱,可以直接使用PHP系統變數$SERVER_NAME或者$HTTP_HOST,注意引用系統內部變數必須大寫。事實上PHP系統內部已經對使用者瀏覽器發送的訪問要求標頭資訊進行了全面的分析,並分割成、儲存成相應的系統變數,以方便程式使用。第二個語句使用正則替換,尋找“.5945.net”並替換成Null 字元,這樣就獲得了第三層網域名。

  通常,一個大型的虛擬網域名稱服務 (DNS)都是將使用者子網域名稱和其對應URL放在資料庫裡,這樣,使用者可以隨時註冊新的第三層網域名和更改網域名稱對應的URL,那麼下面的工作就是從資料庫中檢索出該第三層網域名對應的URL(資料庫檢索程式略)。

  ...... //根據第三層網域名檢索資料庫,並得到變數$url,其中存放了該網域名稱對應的URL地址

  Header("Location: $url"); //系統重新導向,使使用者瀏覽器轉向相應URL

  獲得了對應URL地址之後,我們可以使用PHP的header函數給使用者瀏覽器發送一個重新導向資訊,讓使用者轉移到相應的URL地址,這樣一個完整的虛擬網域名稱服務 (DNS)過程就結束了。這裡我們需要注意的是header函數之前,不能對瀏覽器有任何輸出,否則會產生錯誤,另外重新導向操作中的URL地址應該表述完整,例如:http://www.netease.com/~abc/~index.htm。

廣告視窗的彈出:

  細心的讀者肯定發現,常見的虛擬網域名稱服務 (DNS)通常會有彈出廣告視窗,是怎麼實現的呢?為了能統一控制,必須在重新導向使用者瀏覽器之前彈出這個廣告框,那麼重新導向操作就不能簡單地使用header函數了,因為這個函數要求使用前不能對瀏覽器有任何輸出。要實現它,我們必須改變方法:

  ...... //根據第三層網域名檢索資料庫,並得到變數$url,其中存放了該網域名稱對應的URL地址
echo '<script language="javascript">window.open("adv.htm");</script>';
//輸出一段javascript代碼,用以開啟一個廣告視窗,顯示廣告頁adv.htm
echo '<meta http-equiv="refresh" content="0;URL='.$url.'">';
//使用HTML的meta語句來實現系統重新導向,讓使用者瀏覽器轉向相應URL

  好了,虛擬網域名稱服務 (DNS)的秘密已經完全展示在我們面前了,最後,我想再問一下聰明的讀者,我們這裡的程式片段是假設使用者只輸入形如abc.5945.net的虛擬網域名稱,那我們要實現abc.5945.net/test.htm形式的轉向該怎麼做呢? <

“PHP程式:虛擬網域名稱服務 (DNS)DIY”的更多相關文章 》

愛J2EE關注Java邁克爾傑克遜視頻站JSON線上工具

http://biancheng.dnbcw.info/php/324802.html pageNo:14

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.