新版網站
ISAPI_rewrite 實現二級域名,apache Rewrite 二級域名設定
發布時間:2013/10/5   已被2032人閱讀    分享到:

首先添加你的域名的泛解析到IP,然后在IIS里添加一個空主機頭。

以下正則實現訪問site1.yourdomain.com時,

實際請求yourdomain.com/domain.asp?name=site1

RewriteCond Host: (?!www.)([^.]+).yourdomain.com
RewriteRule (.*) /domain.asp?ame=$1 [I]

==============================================

在httpd.conf中,對某個主機進行以下操作:

<VirtualHost ip:80>
         rewriteengine on
         rewritecond %{HTTP_HOST} [^.]+\.域名\.com$
         rewriterule ^(.+) %{HTTP_HOST}$1 [C]
         rewriterule ([^.]+)\.域名\.com(.*) /$1$2
         其他配置文件
</VirtualHost>

接著在DNS中開設一個泛解析到對應的IP地址。
就可以實現下面的方案。


域名:domain.com
絕對路徑:/home/domain.com/
www.domain.com 自動解析到 /home/domain.com/www/
abc.domain.com 自動解析到 /home/domain.com/abc/
等等子域名都可以自動解析到 /home/domains.com/對應子域名名稱的文件夾

直接建立子域名名稱的文件夾即可使用。不需重啟apache。


泛域名解析就是將客戶的域名全部解析到同一個IP地址。
例如客戶的域名a.com,之下所設的*.a.com全部解析到同一個IP地址上去。
比如客戶設b.a.com就會自已自動解析到與a.com同一個IP地址上去。

泛域名是指 * IN A   123.123.123.123 或 *   IN CNAME www.aaa.com

泛域名解析的用途:

1.可以讓域名支持無限的子域名(這也是泛域名解析最大的用途)。
2.防止用戶錯誤輸入導致的網站不能訪問的問題。

在DNS服務器里面設置泛域名解析有2種方式

1. 在域名解析里面設置 *.a.com的A記錄或者CName 記錄指向某一個IP/服務器名(這種方式 虛擬主機用戶是不支持的)
2. 在域名轉發里面設置 *.a.com 轉發到 http://www.a.com( 虛擬主機可以支持這種轉發方式,用戶在自己的程序中可以判斷訪問者要訪問的域名),我們會在程序技術文檔里面講解

例子二:

實現動態二級域名解析的一個關鍵就是,把特有的名字怎么能夠提出來,因為RewriteRule中的匹配,是不包括域名的匹配的,其實這其中就是一層窗戶紙,把域名先重寫放到“路徑”中,再對“路徑”重寫一次就可以了,也就是說加一步過渡。這樣說大概還一頭霧水,給個實例。

首先按我上次寫的文章的那個需求寫一個,假設動態解析*.iecn.cn。

注意要先做一個所謂的范域名解析,就是說把所有*.iecn.cn解析到某個IP上去,這不是本文章討論范圍就不細說了。

Apache中相關配置如下:

<VirtualHost _default_:80>
ServerAdmin yourmail@domain.com
DocumentRoot /YourWwwRoot/.default
ServerName all-sites
ErrorLog logs/all-sites-error_log
CustomLog logs/all-sites-access_log common
# 下面三行實現動態解析
RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.iecn\.cn$
RewriteRule ^/(.*)$ /%{SERVER_NAME}/$1 ##注##
RewriteRule ^/([a-z0-9\-]+)\.iecn\.cn/(.*)$ /YourWwwRoot/$1/$2 [L]
# 沒有解析到的情況下扔到自己的一個PHP中做一下處理
RewriteRule ^.*$ /index.php [L]
</VirtualHost>

注意我標注的地方,那一步就是一個過渡,說一下過程吧,假設現在訪問:
http://zhong.51zjob.com/xxx
經第一步重寫,變成 /zhong.iecn.cn/xxx
經第二步重寫就是 /YourWwwRoot/zhong/xxx 了,其他的操作與我行前說的基本就差不多了。

再舉一個可能更常見的實例,假設一個博客系統,要求把
http://xxx.51zjob.com
隱式的重寫成
http://blog.51zjob.com/blog.php?u=xxx
這里面的xxx可以看做是一個用戶名,想必類似這樣的需求大家一定都見過很多了,不過多解釋了。

同意先做范域名解析這里不多說。在Apache中做如下重寫(只寫Rewrite部分了):

RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.iecn\.cn$
RewriteRule ^/?$ /%{HTTP_HOST}
RewriteRule ^/([a-z0-9\-]+)\.iecn\.cn/?$ /blog.php?u=$1 [L]

Apache下用rewrite實現任意域名的動態解析

Apache的mod_rewrite模塊功能非常強大,我以后會寫更多的實例出來。

關于mod_rewrite的使用,不想多說,提供兩個相關文檔的地址:
http://w.yi.org/ftp/FAPM/apache/Apache2/zh/mod/mod_rewrite.html
http://man.chinaunix.net/newsoft/Apache2.2_chinese_manual/mod/mod_rewrite.html

如果你只是想用一個現成的你可以直接把我的copy過去改改,如果想從技術上搞清楚,那么首先要掌握兩方面的技術:
Apache下mod_rewrite的使用(可參照我上面提供的兩個地址)
正則表達式(這是一門在很多地方都非常有用的技術)

廢話不多說,說一下我在IECN.NET服務器的實際配置。

我習慣使用NameVirtualHost,如果你的服務器中只想用這種動態的解析,直接在配置文件中做是一樣的,如果想保留自己一些特殊站點的配置,還是用NameVirtualHost吧。

在Apache中,如果啟用了NameVirtualHost,在沒有匹配到的解析的情況下,會默認到第一組VirtualHost中,所以我們的動態解析自然是放到第一組VirtualHost(有關apache的一些配置這里就不多說,自己查閱相關文檔。),如下:
<VirtualHost _default_:80>
     ServerAdmin yourmail@domain.com
     DocumentRoot /YourWwwRoot/.default
     ServerName all-sites
     ErrorLog logs/all-sites-error_log
     CustomLog logs/all-sites-access_log common
     # 下面兩行實現動態解析
     RewriteCond /YourWwwRoot/%{SERVER_NAME} -d
     RewriteRule ^/(.*)$ /YourWwwRoot/%{SERVER_NAME}/$1 [L]
     # 沒有解析到的情況下扔到自己的一個PHP中做一下處理
     RewriteRule ^.*$ /index.php [L]
</VirtualHost>

把YourWwwRoot換成你自己的路徑,注意這里的ServerName沒有讓它起作用,關建看這兩行:
RewriteCond /YourWwwRoot/%{SERVER_NAME} -d
RewriteRule ^/(.*)$ /YourWwwRoot/%{SERVER_NAME}/$1 [L]

第一行是一個rewrite條件,這里的條件是:如果存在路徑/YourWwwRoot/%{SERVER_NAME},%{SERVER_NAME}就是你訪問站點的域名,-d就表示存在這個路徑的意思(如果是文件則是-f);
第二行是一個rewrite規則,這個規則執行的前提是:符合規則的正則表達式匹配;符合它前面(也就是剛才說的第一行)rewrite條件。這里面是的匹配的是.*,也就是所有了,也就是說只要第一行的條件成立,它就會被重寫到/YourWwwRoot/%{SERVER_NAME}/$1,% {SERVER_NAME}是站點的域名,$1則是匹配到的.*。

OK,現在就很清楚了,假設現在有www.domain.com指向到這個服務器,當你訪問它時(這里假設沒有在其他VirtualHost解析這個域名),看看它是如何工作的:
首先它在沒有找到匹配的解析時,就來到了這組默認的VirtualHost;
判斷 /YourWwwRoot/www.domain.com 是否存在;
如果存在,重定向到 /YourWwwRoot/www.domain.com。

假設你訪問 http://www.domain.com/test.html,就會重定向到系統的 /YourWwwRoot/www.domain.com/test.html。

那也就是說你在 YourWwwRoot 下建一個與域名同名的目錄(并具備apache訪問的權限),就實現了這個域名的解析。

說起來似乎有點難懂,其實很簡單的。

這是一個對任意域名的動態解析,哪天有空再寫一下對同一域名下二級域名的解析,其實對這個略做改動就可以了。

本文分享地址:http://www.adrhaerth.com/news/75.html上海網站建設公司朗晟網絡編輯,轉發請注明來源及版權歸屬。
上一篇:沒有了 【關閉】
下一篇:朗晟網絡公司新版官方網站正式上線
色聚阁