`
jone33
  • 浏览: 27016 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

网站多用户二级域名配制

 
阅读更多

使用Apache的URL Rewrite配置多用户虚拟服务器 二级域名

http://strangebank.bokee.com/viewdiary.16292545.html

 

前两天为了让Sylvan的用户能够更方便的记忆自己的个人空间的地址,研究了一下Apache的URL Rewrite功能,实现了每个用户可以把自己的用户名作为二级域名的虚拟主机的设定。

其实,之前也用过URL Rewrite模块,只不过只是用来转换URL中传入的参数的。这次用它来做虚拟主机,其实原理是一样的。

先说一下目的。我想做到的是用户在浏览器中输入类似 http://wells .osall.com/test.php?a=1&b=2  这样的URL地址时,把蓝色部分的用户名作为一个参数并转到页面在服务器上的真正的实际地址 /path/to/file/test.php?un=wells &a=1&b=2  ,并且要让用户在浏览器中看到的URL地址不发生改变。

要实现这个功能,首先要在DNS服务器上打开域名的泛域名解析(自己做或者找域名服务商做)。比如,我就把 *.osall.net 和 *.osall.com全部解析到了我的这台Linux Server上。

然后,看一下我的Apache中关于*.osall.com的虚拟主机的设定。

  1. #*.com,*.osall.net  
  2. <VirtualHost *:80 >  
  3.     ServerAdmin webmaster@osall.com  
  4.     DocumentRoot /home/www/www.osall.com  
  5.     ServerName dns.osall.com  
  6.     ServerAlias dns.osall.net osall.com osall.net *.osall.com *.osall.net  
  7.     CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/osa/a_wosa_log.%Y%m%d 86400" common  
  8.     ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/osa/e_wosa_log.%Y%m%d 86400"  
  9.     <Directory  /home/www/www.osall.com >  
  10.           AllowOverride None  
  11.           Order deny ,allow  
  12.           #AddDefaultCharset GB2312  
  13.     </Directory>  
  14.     <IfModule mod_rewrite.c >  
  15.         RewriteEngine on  
  16.         RewriteCond %{HTTP_HOST}        ^[^.]+\.osall\.(com|net)$  
  17.         RewriteRule ^(.+)               %{HTTP_HOST}$1  [C]  
  18.         RewriteRule ^([^.]+)\.osall\.(com|net)(.*)$ /home/www/www.osall.com/sylvan$3?un=$1&%{QUERY_STRING}      [L]  
  19.     </IfModule>  
  20. </VirtualHost>




在这段设定中,我把*.osall.net和*.osall.com 的Document Root都设定到了 /home/www/www.osall.com
但是,继续看下去,看到
 <IfModule mod_rewrite.c >...</IfModule> 配置了吗?在这里我就配置了URL Rewrite规则。


RewriteEngine on   #打开URL Rewrite功能 
RewriteCond %{HTTP_HOST} ^[^.]+.osall.(com|net)$  #匹配条件,如果用户输入的URL中主机名是类似 xxxx.osall.com 或者 xxxx.osall.net 就执行下面一句 
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]   #把用户输入完整的地址(GET方式的参数除外)作为参数传给下一个规则,[C]是Chain串联下一个规则的意思 
RewriteRule ^([^.]+).osall.(com|net)(.*)$ /home/www/dev.osall.com/sylvan$3?un=$1&%{QUERY_STRING} [L]   # 最 关键的是这一句,使用证则表达式解析用户输入的URL地址,把主机名中的用户名信息作为名为un的参数传给 /home/www /dev.osall.com目录下的脚本,并在后面跟上用户输入的GET方式的传入参数。并指明这是最后一条规则([L]规则)。注意,在这一句中指明 的重写后的地址用的是服务器上的绝对路径,这是内部跳转。如果使用http://xxxx这样的URL格式,则被称为外部跳转。使用外部跳转的话,浏览着 的浏览器中的URL地址会改变成新的地址,而使用内部跳转则浏览器中的地址不发生改变,看上去更像实际的二级域名虚拟服务器。 

这样设置后,重起Apache服务器,测试一下,就大功告成了!

 

_______________________________________________________________________________

http://wenku.baidu.com/view/7e3bfd94dd88d0d233d46ad4.html

_______________________________________________________________________________

 

weblogic 10二级域名 配置

 

weblogic配置二级域名:

 

1 有多个工程,比如说工程abc,工程def,如果直接部署到开发模式的domain里,有一个是主工程,另一个要以abc.com:7001/def访问,而且其他工程里要在weblogic.xml文件里加上<context-root>/def</context-root>你的应用名称,现在我们想abc.yourname.com,def.yourname.com这样访问。

 

2 首先将weblogic.xml文件里上面的语句改成<context-root>/</context-root>

host文件里对应成127.0.0.1

127.0.0.1   abc.yourname.com

127.0.0.1   def.yourname.com

 

3 现在开始配置

 

////创建虚拟主机路径

 

1) 首先:weblogic建一个domainproducts mode模式的

 

2) 启动该域,进入到console,http://localhost:7001/console

 

3) 域名--》Environment--》Virtual Hosts -->lock & edit -->new

 

4) Name : abc,点进去 configuration-->Virtual Host Names:abc.yourname.com-->Targets -->选上 Admain Server

 

5) save ===> activate changes

 

其他类似,可以建多个,如,def.yourname.com

 

////部署工程

 

1)Deployments-->lock & edit

 

2) install--》 选择你的工程 ,选择对应的Virtual Host

 

3)直接在这里的控制台启动

 

就可以访问了http://abc.yourname.com:7001,http://def.yourname.com:7001

 

///配置文件信息

\bea\user_projects\domains\test_domain\config

<virtual-host>
    <name>def</name>
    <target>AdminServer</target>
    <virtual-host-name>def.yourname.com</virtual-host-name>
  </virtual-host>
  <virtual-host>
    <name>www</name><!--主工程-->
    <target>AdminServer</target>
    <virtual-host-name>www.yourname.com</virtual-host-name>
  </virtual-host>

 <app-deployment>
    <name>abc</name>
    <target>www</target>
    <module-type>war</module-type>
    <source-path>D:\workspace\abc\WebRoot</source-path>
    <security-dd-model>DDOnly</security-dd-model>
  </app-deployment>
  <app-deployment>
    <name>def</name>
    <target>def</target>
    <module-type>war</module-type>
    <source-path>D:\workspace\def\WebRoot</source-path>
    <security-dd-model>DDOnly</security-dd-model>
  </app-deployment>

 

将默认端口改为80

 

<server>
    <name>AdminServer</name>
    
<listen-port>80</listen-port>加上这句就可以了
    <listen-address></listen-address>
  </server>

 

 

其他设置:

 

 

D:\bea\user_projects\domains\test_domain\bin\stopWebLogic.cmd文件中

找到   SETLOCAL

在这行之下加上:

set userID=weblogic

 set password=weblogic

每次停止weblogic的时候就不用输入用户名,密码

 

同理

 

D:\bea\user_projects\domains\test_domain\bin\startWebLogic.cmd文件中

找到   set SAVE_CLASSPATH=

在这行之下加上:

set WLS_USER=weblogic

 set WLS_PW=weblogic

 

每次启动weblogic的时候就不用输入用户名,密码

 

——————————————————————————————————————————————

http://www.wojilu.com/Common/Page/86

二级域名配置

二级域名一般情况下不需要,但在某些情况下,比如模拟网站群,比如作为一项附加功能给用户,让用户有独立家园的感觉……这些时候,可能有一定的商业价值。

 

要给“我记录网站综合系统”开启网站配置功能,请看下面的教程。

 

第一部分:效果预览

--------------------------------------

本来你的个人空间的网址是 www.wojilu.com/zhangsan.aspx ,现在是 zhangsan.wojilu.com

本来你的博客链接是 www.wojilu.com/space/lisi/Blog1/Post/3.aspx ,现在是 lisi.wojilu.com/Blog1/Post/3.aspx

……

依次类推。 

 

 

第二部分:准备工作

------------------------------------------

 

第一步:配置IIS以支持泛域名映射

 

你需要打开IIS,检查其中的默认网站是否正确设置——

1)端口必须是80

2)主机头必须是留空,如下图所示。

 

 

通过这一步,这就意味着IIS打开了泛域名映射,任何通过***.abc.com 这种非特定的域名或二级域名来访的时候,都会映射到此网站。

 

3)因为IIS只支持一个泛域名映射,所以请关闭IIS中其他所有网站。

非常可惜,本来你的IIS可以放多个网站的,现在你只能放一个。没有办法,IIS本身如此。
如果你的网站不使用域名,而是直接使用ip+端口访问,那倒是可以,不用关闭。

 

第二步:配置DNS,将所有二级域名指向你的ip地址

 

请访问域名服务商给你的域名DNS配置网址,在A记录中,

增加一条 *.abc.com 指向到你的ip(其中abc请换成你的域名)

 

 

 

第三部分:让wojilu支持二级域名

-------------------------------------------------

 

第一步,请登录你的网站,然后注销

如果没有注销,因为下面的步骤会更改cookie配置,从而导致你无法正常使用,无法注销也无法登录。

当然,如果已经是未登录状态,那自然最好。

 

第二步,请打开网站根目录的 web.config 文件,在forms这一块中增加你网站的域名

<forms name="wojiluASPXAUTH" />

增加为

<forms name="wojiluASPXAUTH" domain=".mytest.com"loginUrl="/Main/Login.aspx" />

另外,如果你的网站没有设置后缀名,那么 Main/Login.aspx 也相应去掉后缀名

 

这一步的作用是:让所有二级域名和主站共享cookie状态,避免无法正常登录的问题。

 

第三步,打开/framework/config/mvc.config 文件,增加两行配置

 

// 是否启用域名映射

isDomainMap : true

 

// 二级域名通配符对应的 owner类型

subdomainWildcardType : wojilu.Members.Users.Domain.User

 

其中的通配符映射的意思是——

 

如果 subdomainWildcardType 是用户类型(wojilu.Members.Users.Domain.User),那么

zhangsan.abc.com 这种二级域名都会映射到 ww w.abc.com/space/zhangsan.aspx

 

如果 subdomainWildcardType 是群组类型(wojilu.Members.Groups.Domain.Group),那么

zhangsan.abc.com 这种二级域名都会映射到 ww w.abc.com/group/zhangsan.aspx

 

目前“我记录网站综合系统”支持两种类型的“会员类型”(IMember),所以只能填写两个值之一,或者是wojilu.Members.Users.Domain.User ,或者是wojilu.Members.Groups.Domain.Group 
当然,如果你将来扩展了
IMember类型,则此处还可以填写其他数据。

 

第四步,重启网站,访问网站首页,即可看到二级域名效果。

 

【常见问题】

1)一定要关闭页面缓存,否则不经过路由解析。当然这个限制会尝试解决TODO

2)为了让用户cookie失效,也可以修改web.configcookie名称

3为了二级域名方便使用,网址配置成必须有后缀名.aspx换句话说,如果开启二级域名功能,需要网站建立之初就开启,如果在使用一段时间之后再开启,有些链接就成了死链。

4)在二级域名下无法请求主域名网址的js,因为js不能跨域,在开发过程中必须注意这方面的问题。

 

 

 

_______________________________________________________________________________

 

 

 

 

 

分类: web

 

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

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

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

 

分享到:
评论

相关推荐

    网站发布的配制

    网站发布的配置是一个涉及多步骤和关键技术的流程,主要在Tomcat服务器、Windows Server 2003操作系统以及Java环境中进行。下面将详细讲解这个过程中的关键知识点。 首先,Tomcat是一个开源的Java Servlet容器,它...

    缓冲溶液配制方法.pdf

    4. 邻苯二甲酸-盐酸缓冲液:邻苯二甲酸氢钾(C6H4KO7·H2O)和盐酸(HCl)配制的缓冲液。该缓冲液广泛应用于生物化学和药学领域。 5. 柠檬酸-柠檬酸钠缓冲液:柠檬酸(C6H8O7·H2O)和柠檬酸钠(Na3C6H5O7·2H2O)...

    struts多模块配制

    在大型企业级项目中,通常会将应用划分为多个模块,以提高代码的复用性和管理效率。这就是“Struts多模块配置”所涉及的核心概念。 在Struts多模块配置中,每个模块代表一个独立的功能或者业务领域,它们之间通过...

    消毒液的配制PPT课件.pptx

    【84消毒液的配制知识】 84消毒液是一种常用的含氯消毒剂,主要成分为次氯酸钠,其有效氯含量通常在5%左右。有效氯是衡量消毒液消毒能力的重要指标,它决定了消毒液的消毒效果。在实际应用中,我们需要根据消毒需求...

    模拟水配制及地层水矿化度计算程序

    模拟水配制及地层水矿化度计算程序

    电子政务-三元材料前驱体用电池级氨水配制系统.zip

    电子政务-三元材料前驱体用电池级氨水配制系统.zip

    红细胞悬液的配制.pdf

    红细胞悬液的配制.pdf

    溶液配制小软件

    溶液配制小软件

    消毒液配制规定培训讲学.pdf

    6. **适用范围**:75%医用酒精适用于手部消毒,84消毒液和新洁尔灭用于洁净区的多方面消毒。不同消毒液的交替使用可以防止耐药性产生。 7. **注意事项**: - 配制的消毒液应尽快使用,最长不超过24小时。 - 盛装...

    linux 服务器系统 命令配制与lamp网站搭建环境配制

    同时,不要忘记在`/etc/resolv.conf`中配置DNS服务器,以确保域名解析正确。最后,通过`ifdown`和`ifup`命令重启网络服务,应用新的配置。 主机名的修改也相当简单,只需要编辑`/etc/hostname`文件即可。 接着,...

    实验室常用试剂、缓冲液的配制方法.pdf

    以上试剂的配制过程中涉及多个关键技术点,如溶液的pH值调节、溶液的灭菌处理、溶液的最终定容以及溶液的储存条件等。这些技术点要求操作者具备一定的实验技巧和理论知识。在实验中,准确测量和严格遵守操作程序是...

    盐酸标准溶液的配制与标定.ppt )

    盐酸标准溶液的配制与标定方法、数据处理、结果计算

    84消毒液浓度配制公式.pdf

    在标题提到的“84消毒液浓度配制公式”中,涉及到的关键知识点包括如何计算所需原液量以及配制特定浓度的消毒液。公式如下: 需抽取的84消毒液 = 需配制浓度(x%)x 1000ml = 原溶液浓度(y%)x 1000ml 这个公式...

    jetty高级配制api文档

    jetty api文档,高级技术开发应用.欢迎下载使用

    包衣液配制标准操作程序.doc

    包衣液配制标准操作程序是制药行业中一项关键的生产环节,主要应用于药物制剂的薄膜包衣过程。这种操作程序的设立旨在确保包衣液的配制符合严格的工艺质量和安全标准,以保证最终产品的质量和稳定性。 1. **目的**...

    影响污水配制聚合物溶液粘度水质相关因素研究

    聚合物驱通常使用清水来配制聚合物溶液,但若能够利用采油污水来替代清水,不仅可以节约水资源,减少污水排放量,还能缓解注采不平衡问题,对环境保护也具有积极影响。鉴于此,研究采油污水配制聚合物溶液的可行性...

    油田聚合物配制站监控系统的开发与研究.rar

    【油田聚合物配制站监控系统的开发与研究】 在当今数字化和智能化的浪潮下,油田生产也逐渐走向自动化和信息化。油田聚合物配制站监控系统是这一趋势下的重要成果,它结合了现代信息技术和石油工程,实现了对油田...

    常用消毒液配制习题.doc

    #### 二、消毒液配制方法与计算公式 1. **消毒液稀释浓度计算公式**: - 正确公式:浓溶液容量 = (稀溶液浓度 / 浓溶液浓度) * 稀溶液容量 - 解析:此公式用于计算从高浓度消毒液稀释到所需低浓度消毒液所需的浓...

Global site tag (gtag.js) - Google Analytics