• 解析无限个二级域名的方法


    1 解析无限个二级域名的方法

    解析无限个二级域名的方法有三种:
    无论使用哪种,都必须使用域名泛解析。将*.test.com(此处我们test.com作例子)解析到你指定的服务器上。
    如:
    *.test.com 222.222.222.222

    注:
    作域名泛解析前,必须确认域名服务商对你提供域名泛解析服务。否则,后面的工作都是徒劳的。

    方法一:使用Windows自带DNS解析。
    步骤:
    1,添加好test.com,如下图
    帖子相关图片:

    2,在test下添加一个名称为 * 的域 (右键,添加域),添加完如下图
    帖子相关图片:

    3,在*的域下,添加一个主机(右键,新建主机,主机名称为空,IP则填写为您要将域名泛解析的对应IP),添加完如下图。
    帖子相关图片:

    解析完成,测试一下,Ping test.test.com 是不是解析到222.222.222.222

    方法二:使用程序进行判断调整。
    步骤:
    1,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\.|nhi)(.*)\.test\.com 
    RewriteRule /(.*) /$1/$2 [I,L]


    此三方法比较:
    偶个人认为,方法一,解析速度会快点,但没有做过验证。只是感觉系统自带的东西会好些。
    另,方法一和三,一台服务器可以做多域名的泛解析,而方法二,一台服务器只可以做一个域名的泛解析。

    由于个人能力有限,参考了一下资料,编写此文。如有错误,欢迎大家指正。谢谢。


     

     

    首先添加你的域名的泛解析到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( 虚拟主机可以支持这种转发方式,用户在自己的程序中可以判断访问者要访问的域名),我们会在程序技术文档里面讲解

    例子二:
    http://www.xuega.com/klein/blog/article_321.html

    实现动态二级域名解析的一个关键就是,把特有的名字怎么能够提出来,因为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.iecn.cn/xxx
    经第一步重写,变成 /zhong.iecn.cn/xxx
    经第二步重写就是 /YourWwwRoot/zhong/xxx 了,其他的操作与我行前说的基本就差不多了。

    再举一个可能更常见的实例,假设一个博客系统,要求把
    http://xxx.iecn.cn
    隐式的重写成
    http://blog.iecn.cn/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]

    zz from http://blog.iecn.net/blog.php?do=showone&tid=1013


    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访问的权限),就实现了这个域名的解析。

    说起来似乎有点难懂,其实很简单的。

    这是一个对任意域名的动态解析,哪天有空再写一下对同一域名下二级域名的解析,其实对这个略做改动就可以了。

     

     

     

    Rewrite模块功能强大,可以轻松提取主机头信息。

    0、首先需要一个有效的顶级域名,并且设置该域名下二级域名的泛解析到虚拟主机所在服务器IP(即如:*.77ya.com => 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.77ya.com www.77ya.com) 
    # RewriteCond Host: (?:web|www)\.77ya\.com

    # 多数情况下是一个,即当前提供二级域名服务的系统(如建站系统) 
    RewriteCond Host: web\.77ya\.com

    RewriteRule (.*) $1 [L] 

    # 解决不规范目录(末尾无/)的问题 
    # 但前提是目录名不含‘.’而文件名必须包含,否则无法区分两者 
    # 如果保证URL中的目录名称规范,则无需此规则 
    RewriteRule ^/([^.] [^/]$) /$1/ [L,R] 

    # 提取任意的二级域名名称(即第一个词汇) 
    # 用[a-zA-Z0-9_-]限制名称字符,重写Url到Home/子目录下 
    # 如 test.77ya.com => web.77ya.com/Home/test 
    RewriteCond Host: ([a-zA-Z0-9_-] )\.77ya\.com 
    RewriteRule ^/(.*) /Home/$1/$2 [I,L]


    注意!上面的规则不能写成 
    RewriteRule ^/(.*) http\://web\.77ya\.com/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的写权限!)

  • 相关阅读:
    题目1009:二叉搜索树
    腾讯云API 生成Authentication Header加密字符串 C#代码示例
    《神经网络与深度学习》
    《神经网络与深度学习》第一章 使用神经网络来识别手写数字(三)- 用Python代码实现
    Rust语言的多线程编程
    C# DataTable的Select()方法不支持 != 判断
    《神经网络与深度学习》第一章 使用神经网络来识别手写数字(二)- 用梯度下降来训练学习
    C# 对多个文件进行zip压缩
    《神经网络与深度学习》:第一章 使用神经网络来识别手写数字(一)
    谷歌浏览器如何查看或获取Cookie字符串
  • 原文地址:https://www.cnblogs.com/ddyq/p/2205124.html
Copyright © 2020-2023  润新知