isapi_rewrite 二级域名重写

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。举例如下:
代码

[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 attacksRewriteRule .*(?: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/.cnRewriteRule (.*)   $1  [L]# 解决不规范目录(末尾无/)的问题# 但前提是目录名不含‘.’而文件名必须包含,否则无法区分两者# 如果保证URL中的目录名称规范,则无需此规则RewriteRule ^/([^.]+[^/]$)  /$1/  [L,R]# 提取任意的二级域名名称(即第一个词汇)# 用[a-zA-Z0-9_-]限制名称字符,重写Url到Home/子目录下# 如 test.eboat.cn => web.eboat.cn/Home/testRewriteCond Host:  ([a-zA-Z0-9_-]+)/.eboat/.cnRewriteRule ^/(.*)  /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的写权限!

你可能感兴趣的:(isapi_rewrite 二级域名重写)