如何用php實現類似博客的二級域名

 

首先查到了與此相關的技術:泛域名。

泛域名是以*號爲主機名的域名,如果做了泛域名解析,並且生效了,那域名前面不管寫什麼,只要後面是你的域名,那都可以訪問到你的網站上去. 就像“*.icech.com”。那麼泛域名有什麼功用呢?這麼說吧,你在DNS 中建立一個名爲“*.icech.com”的泛域名,那麼所有就像www.icech.com、news.icech.com、love.icech.com 等等格式的域名都不用建立就會自動生效,他們都會指向建立此泛域名時指向的IP 地址。如果你申請了一個域名,通過這樣的測試,你就會知道你申請的域名是不是泛域名了。

建立泛域名的大致步驟是:

1、進入DNS,選“正向查找區域”,單擊右鍵,新建“區域”,輸入icech.com

2、選中“icech.com”,單擊右鍵,新建“域”,輸入“*”

3、選中“*”,新建“主機”,主機名保持爲空,輸入相應的IP 地址就OK了。

利用程序來完成虛擬域名的解析

假設我們希望設置一個news.icech.com 的域名,當我們在瀏覽器中輸入“news.icech.com”的域名時,他會轉向它的真實地址htttp://www.weste.net/index.htm。一般流程肯定就是,它會首先找到DNS 服務器,並且進行域名與IP 地址的轉換,這裏因爲我們已經設置了泛域名,news.icech.com 就會直接指向icech.com 指向的IP,這之間我們不能做什麼其他的設置來改變這一流程。那麼我們所要做的就是在這個IP 地址所對應主機的默認WEB頁面上做文章,讓不同的子域名進行URL重定向,轉到它們所希望的URL 網址上去。

1、設置icech.com所在主機所默認的WEB服務的默認文檔爲index.asp、index.php 或者index.cgi等動態頁面,而不能是靜態的index.htm 頁面。

2、通過ASP、PHP或者CGI程序來進行URL的重定向功能

(1)index.php

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

$domain=eregi_replace('.icech.com', '', $domain); //截取域名全稱,獲取用戶所要訪問的三級域名,獲取所訪問的域名全稱,可以直接使用PHP系統變量$SERVER_NAME 或 者$HTTP_HOST,注意引用系統內部變量必須大寫。事實上PHP 系統內部已經對用戶瀏覽器發送的訪問請求頭信息進行了全面的分析,並分割成、保存成相應的系統變量,以方便程序使用。第二個語句使用正則替換,查找“.icech.com”並替換成空字符,這樣就獲得了三級域名。

通常,一個大型的虛擬域名服務都是將用戶子域名和其對應URL放在數據庫裏,這樣, 用戶可以隨時註冊新的三級域名和更改域名對應的URL,那麼下面的工作就是從數據庫中檢索出該三級域名對應的URL(數據庫檢索程序略)。

...... //根據三級域名檢索數據庫,並得到變量$url,其中存放了該域名對應的URL 地址Header("Location: $url"); //系統重定向,使用戶瀏覽器轉向相應URL獲得了對應URL 地址之後,我們可以使用PHP的header函數給用戶瀏覽器發送一個重定向信息,讓用戶轉移到相應的URL地址,這樣一個完整的虛擬域名服務過程就結束了。

這裏我們需要注意的是header函數之前,不能對瀏覽器有任何輸出,否則會產生錯誤,另外重定向操作中的URL地址應該表述完整,例如:http://www.weste.net/index.htm廣告窗口的彈出:常見的虛擬域名服務通常會有彈出廣告窗口,是怎麼實現的呢?爲了能統一控制,必須在重定向用戶瀏覽器之前彈出這個廣告框,那麼重定向操作就不能簡單地使用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。

(2)index.asp

<% name=request.querystring("name") %> ‘這樣來獲取用戶所訪問的域名全稱
trim(name) ‘用trim 函數來截取域名全稱,獲取用戶所要訪問的三級域名與數據庫對比,如果與數據庫所設置的虛擬域名相同,則直接用response.redirect 轉向http://www.weste.net/index.htm頁面,否則設定另外轉向頁面。

還有兩種方法可以做到解析無限個二級域名

使用程序進行判斷調整
iis服務的主機頭留空,新建Default.asp文件,並把新建文件的執行優先級設定爲最高(IIS設置屬性中的文檔,將Default.asp移到最上面)。
Default.asp文件代碼:
<%
Dim iURL
iURL = Split(Request.ServerVariables("SERVER_NAME"),".")
If Lcase(iURL(0))="www" Then
'此處爲網站首頁地址,請自行選擇
Response.Redirect("index.asp")
Else
'如二級域名所調轉地址,請自行更改此處地址
Response.Write( "<frameset><frame src=""**.asp?"&iURL(0)&".index.html""></frameset>")
End If
%>

使用 ISAPI_Rewrite URL處理引擎
先介紹一下ISAPI_Rewrite :
ISAPI_Rewrite是一個強大的基於正則表達式的URL處理引擎。它非常類似於Apache's mod_Rewrite,但它是專爲IIS設計的。

ISAPI_Rewrite有兩個版本:ISAPI_Rewrite Full與ISAPI_Rewrite Lite。

ISAPI_Rewrite Lite是免費版本,但不支持反向代理功能。
ISAPI_Rewrite Full只能下載到30天的試用版本。

解析二級域名就可以用ISAPI_Rewrite一個規則來實現。
如:
test.test.com 映射成 www.test.com/test/
規則如下:
RewriteCond Host: (?!/.|www|ww)(.*).test.com
RewriteRule (.*) http/://www.test.com/$1$2 [I,R]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章