程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> 在IIS中用ISAPI_Rewrite Lite版配置虛擬主機支持二級域名

在IIS中用ISAPI_Rewrite Lite版配置虛擬主機支持二級域名

編輯:ASP技巧

為二級域名的問題搞了2天,狂郁悶。。。。先是用程序,感覺太累贅,簡單的又不好使(用iframe嵌入,比較糟糕,不能像真正的域名一樣訪問),後來發覺URL Rewrite是最簡單的解決辦法……搜IIS用的Rewrite,下載、試用……,查資料、看說明——唉,E文不好,走了不少彎路!莫笑(地處偏僻,身邊難見高人)

如果是用apache就簡單多了,默認的Rewrite模塊功能強大,可以輕松提取主機頭信息。

具體內容:

0、首先需要一個有效的頂級域名,並且設置該域名下二級域名的泛解析到虛擬主機所在服務器ip(即如:*.eboat.cn => 123.234.55.101)。

1、在http://www.helicontech.com/download.htm下載ISAPI_Rewrite Lite Free版本。版本不用太高,如果願意付點$,用Full版當然也不錯哦。安裝,隨便裝在哪個位置。

注意:Lite版本不支持虛擬主機層次的配置,但僅僅是配置(就是dll只能讀取自身安裝目錄下的全局配置httpd.ini)。如果是僅用於某虛擬主機的任意二級域名解析,可以將ISAPI_Rewrite.dll僅放置在該虛擬主機的配置中(即不在IIS的“網站>ISAPI篩選器”中插入,而是添加在虛擬主機網站的ISAPI篩選器中),這樣就不會影響服務器對其它網站的處理。

2、將需要二級域名的虛擬主機的主機頭置空,使得所有未在服務器上單獨配置的虛擬主機域名都被定向到此處。注意!不是在服務器上單獨新建一個無主機頭的網站,必須在需要實現二級域名的當前網站上進行URL的Rewrite配置。這點很重要。

3、將ISAPI_Rewrite安裝時自動配置在IIS中的全局設定取消(IIS>網站>ISAPI篩選器,刪除ISAPI_Rewrite),在需要二級域名解析的虛擬主機(網站)中配置ISAPI_Rewrite.dll(屬性>ISAPI篩選器>添加...,名稱可以隨便寫,如Url-Rewrite)。

4、修改ISAPI_Rewrite安裝目錄下的配置文件httpd.ini。舉例如下:
Java代碼
[ISAPI_Rewrite]  
RepeatLimit 1 
# Defend your computer from some worm attacks  
RewriteRule .*(?:global.asa|default\.ida|root\.exe|\.\.).* . [F,I,O]  
 
# 排除當前虛擬主機需要正常訪問的域名(web.eboat.cn www.eboat.cn)  
# RewriteCond Host:  (?:web|www)\.eboat\.cn  
# 多數情況下是一個,即當前提供二級域名服務的系統(如建站系統)  
RewriteCond Host:  web\.eboat\.cn  
RewriteRule (.*)   $1  [L]  
 
# 解決不規范目錄(末尾無/)的問題  
# 但前提是目錄名不含‘.’而文件名必須包含,否則無法區分兩者  
# 如果保證URL中的目錄名稱規范,則無需此規則  
RewriteRule ^/([^.]+[^/]$)  /$1/  [L,R]  
 
# 提取任意的二級域名名稱(即第一個詞匯)  
# 用[a-zA-Z0-9_-]限制名稱字符,重寫Url到Home/子目錄下  
# 如 test.eboat.cn => web.eboat.cn/Home/test  
RewriteCond Host:  ([a-zA-Z0-9_-]+)\.eboat\.cn  
RewriteRule ^/(.*)  /Home/$1/$2  [I,L] 

[ISAPI_Rewrite]
RepeatLimit 1
# Defend your computer from some worm attacks
RewriteRule .*(?:global.asa|default\.ida|root\.exe|\.\.).* . [F,I,O]

# 排除當前虛擬主機需要正常訪問的域名(web.eboat.cn www.eboat.cn)
# RewriteCond Host:  (?:web|www)\.eboat\.cn
# 多數情況下是一個,即當前提供二級域名服務的系統(如建站系統)
RewriteCond Host:  web\.eboat\.cn
RewriteRule (.*)   $1  [L]

# 解決不規范目錄(末尾無/)的問題
# 但前提是目錄名不含‘.’而文件名必須包含,否則無法區分兩者
# 如果保證URL中的目錄名稱規范,則無需此規則
RewriteRule ^/([^.]+[^/]$)  /$1/  [L,R]

# 提取任意的二級域名名稱(即第一個詞匯)
# 用[a-zA-Z0-9_-]限制名稱字符,重寫Url到Home/子目錄下
# 如 test.eboat.cn => web.eboat.cn/Home/test
RewriteCond Host:  ([a-zA-Z0-9_-]+)\.eboat\.cn
RewriteRule ^/(.*)  /Home/$1/$2  [I,L]


注意!上面的規則不能寫成
RewriteRule ^/(.*) http\://web\.eboat\.cn/Home/$1/$2 [I,L]

這也是必須在系統所在網站上解析的原因。如果最後是[I,R],訪問是可以的,但是浏覽器的地址欄會顯示實際的Url,達不到透明二級域名的效果。

總結:

之前查了Google,沒找到簡單實現的例子。其實這主要是規則上的問題,即使是將ISAPI_Rewrite放在IIS的“網站”全局配置中也是可以的,因為規則不會匹配其它的網站(頂級域名限制),Rewrite不會起作用。只是放在全局配置中,訪問其它網站也要經過這個.dll過濾器,或多或少的有些不合理。

成功配置和運行,網上說要用Full的破解版才行(1.x的版本,試過可行)。所以這裡特地將Lite免費版的用法貼出來。

(注意:最後可能需要重啟IIS服務器,檢查一下ISAPI過濾器中Rewrite是否已經載入——綠色的向上箭頭。另外,如果是NTFS文件系統,ISAPI_Rewrite的安裝目錄需要添加網站用戶或everyone的寫權限!)

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved