`
smarttony2013
  • 浏览: 45999 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

简单快速的Apache二级域名实现方法介绍 .

 
阅读更多

首先,你的拥有一个有泛域名解析的顶级域名,例如: domain.com

其次,在 httpd.conf 中打开 mod_rewrite

之后,在 httpd.conf 的最后,添加以下内容:

RewriteEngine on

RewriteMap lowercase int:tolower

RewriteMap vhost txt:/usr/local/etc/apache/vhost.map

RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$

RewriteCond ${vhost:%1} ^(/.*)$

RewriteRule ^/(.*)$ %1/$1

其中的 /usr/local/etc/apache 是你的 apache 服务器配置文件所在路径,根据实际情况更改。

然后,在这个所在路径的目录下创建一个文件: vhost.map

内容为:

www.domain.com/usr/local/www/data-dist/domain

bbs.domain.com /usr/local/www/data-dist/bbs

anyname.domain.com /usr/local/www/data-dist/anyname

以上部分都是:" 域名+空格+绝对路径" 的形式。

最后,在你的网站根目录 /usr/local/www/data-dist 下,创建对应目录:

domain , bbs , anyname 等等,理论上可以无限。

这样,通过浏览器,访问www.domain.com时,实际上访问的就是 /usr/local/www/data-dist/domain目录下的文件。同理,访问 bbs.domain.com 实际上访问的就是 /usr/local/www/data-dist/bbs 目录下的文件。而且,你可以

随时更改 vhost.map 来增加、删除、修改你的二级域名和所指向的实际路径,不用重启 apache。

如何开启mod_rewrite

2007年7月29日 | 分类:用学习充实自我| 标签:mod_rewrite| 271pv

仅作为备忘.

在apache的 httpd.conf中 去掉下面一行前面的#,

LoadModule rewrite_module modules/mod_rewrite.so

重启apache生效。

目录权限设置:

Apache的httpd.conf中找到网站目录对应的

"AllowOverride None"

改为

"AllowOverride FileInfo Options"

因为如果设置为"AllowOverride None"

.htaccess中的rewrite指令对该文件夹就无效了

apache Rewrite 二级域名设定

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

说起来似乎有点难懂,其实很简单的。
这是一个对任意域名的动态解析,哪天有空再写一下对同一域名下二级域名的解析,其实对这个略做改动就可以了。

/--------------

我的域名是在www.3322.org申请的二级域名wl.7766.org,在www.3322.org那里对wl.7766.org打开了“通配符(*)支持”的选项,也就是域名泛解析的支持,所有的 *.wl.7766.org 都指向wl.7766.org。

现在我把httpd.conf内容改为如下,用户空间的个人域名开通了。

  1. NameVirtualHost 192.168.1.207
  2. <VirtualHost 192.168.1.207>
  3. ServerName wl.7766.org
  4. DocumentRoot /var/www/htdocs #网站根目录
  5. </VirtualHost>
  6. <VirtualHost 192.168.1.207>
  7. DocumentRoot /var/www/htdocs/xspace #X-space的目录
  8. ServerName blog.wl.7766.org # X-space博客的域名
  9. ServerAlias *.blog.wl.7766.org # 开通泛解析
  10. </VirtualHost>
复制代码


用户可以用username.blog.wl.7766.org这样的域名访问自己的空间(有点长,哈)。

只是有一个小问题,当用blog.wl.7766.org进入X-space页面,在X-space的首页右边快速登录处登录,登录成功后身份仍是Guest,如果用wl.7766.org/xspace访问,则一切正常,大概是cookies的问题。
如果是在顶部导航栏的“用户登录”处登录,那么不论用什么域名,登录也一切正常,因为这个地方的链接总是http://wl.7766.org/xspace/index.php/action/login

分享到:
评论

相关推荐

    最简单快速的Apache二级域名实现方法介绍

    本文将详细介绍一种最简单快速的方法来实现Apache二级域名。 首先,你需要确保你的顶级域名(如 `domain.com`)已经进行了泛域名解析。泛域名解析意味着任何子域名(如 `www`, `bbs`, `anyname`)都将指向同一IP...

    Windows 下 apache 配置二级域名.doc

    ### Windows 下 Apache 配置二级域名详解 #### 一、前言 在互联网时代,网站建设和维护成为企业和个人展示自己、提供服务的重要手段之一。在众多服务器软件中,Apache因其稳定性高、配置灵活等特点被广泛使用。...

    Apache设置二级域名的方法

    Apache设置二级域名的方法,可以帮助很好解决在Apache设置二级域名

    二级域名分发系统源码.zip

    二级域名分发系统是一种网络应用架构,用于将顶级域名下的不同子目录映射为独立的二级域名,以实现网站内容的高效管理和用户友好的访问体验。在这个“二级域名分发系统源码.zip”压缩包中,包含了一套完整的源代码,...

    Apache+tomcat动态二级域名.doc

    【Apache + Tomcat 动态二级域名配置详解】 在互联网应用中,动态二级域名的配置可以为用户提供更灵活、个性化的访问体验。本教程将详细解释如何通过Apache和Tomcat来实现这一功能。 首先,我们需要准备Apache...

    CI框架(CodeIgniter)实现ThinkPHP一样的二级域名解析

    本例主要实现在CI框架中像ThinkPHP一样的二级域名解析方式 1. ci_url_rewirte.php 为实现的代码 可将其插入到system/URI.php 即框架URI类的相应地方 2. URI.php 为我实验版本(Version 1.0)的URI类,其他版本应用...

    apache 二级域名解析实现方法

    ### Apache二级域名解析实现方法详解 #### 一、前言 在互联网应用中,二级域名是一种常见的需求场景,尤其对于大型网站来说,合理利用二级域名能够更好地组织网站内容,提高用户体验,同时也便于SEO优化。Apache...

    Apache 二级域名实现方法介绍

    总结起来,Apache二级域名的实现涉及以下几个步骤: 1. 配置泛域名解析。 2. 启用Apache的mod_rewrite模块。 3. 在 httpd.conf 中添加URL重写规则。 4. 创建vhost.map文件并定义子域名与目录的映射。 5. 确保物理...

    二级域名系统

    4. CDN(内容分发网络)重定向:如果使用了CDN服务,可以在CDN的控制面板中配置二级域名转发,利用CDN的全球节点网络实现快速的重定向。 了解这些基础知识后,我们可以通过分析"2domain"这个压缩包文件来深入探讨二...

    apache+tomcat二级域名详解

    apache + tomcat整合配置二级域名

    商业编程-源码-老枪二级域名系统朴素版.zip

    "老枪二级域名系统朴素版"是一个针对商业编程场景设计的源码实现,它提供了一个基础但功能完整的二级域名管理解决方案。本文将深入探讨这个系统的结构、工作原理及其关键代码,以帮助读者理解和应用此类系统。 一、...

    基于PHP的kldns快乐二级域名分发系统源码.zip

    【标题】"基于PHP的kldns快乐二级域名分发系统源码.zip"指的是一个用于实现二级域名自动分发的软件系统,它基于PHP编程语言进行开发。在互联网上,尤其是大型网站或服务提供商,二级域名常用于组织内容、提供不同...

    Apache本地二级域名配置方法

    本文讲述了Apache本地二级域名配置方法。分享给大家供大家参考,具体如下: 我们在本地调试web程序时,常有很多不同的项目。不同的项目,我们希望使用不同的文件夹和不同的域名。 比如今天我正在建设一个鲜花网站,...

    DZAPP二级域名教程

    "DZAPP二级域名教程"是指如何在使用DZ应用平台(DZAPP)时,为论坛的各个板块或者独立模块设置二级域名的方法。这涉及到网站的域名解析、虚拟主机配置以及DZ后台的设置等多个环节。下面,我们将深入探讨这一主题,以...

    linux 下 apache + tomcat 配置多个域名(包括二级域名)

    在Linux环境中,使用Apache HTTP服务器和Tomcat应用服务器配置多个域名(包括二级域名)是一项常见的任务,这可以实现一个服务器托管多个网站或者服务。Apache通常作为前端服务器处理静态内容,而Tomcat则作为后端...

    空想软件PHP二级域名系统

    "空想软件PHP二级域名系统"是一个专门针对二级域名管理的解决方案,主要应用于网站运营、多用户平台或者大型网络环境中,以实现高效且灵活的子域名分配和管理。这个系统可能包含了配置、创建、绑定、解析二级域名...

    UrlRewrite实现二级域名或多级域名

    《使用UrlRewrite实现二级域名或多级域名》 在互联网应用开发中,URL重写(UrlRewrite)是一项重要的技术,它允许我们根据特定规则改变请求的URL,从而实现诸如优化SEO、隐藏真实路径、实现二级或多级域名等功能。...

    二级域名配置流程

    本文将详细介绍如何在腾讯云上为Ubuntu系统配置二级域名的过程。 #### 二、准备工作 1. **注册与登录腾讯云**:首先,你需要拥有一个腾讯云账号,并且已经购买了相应的云服务器实例(例如Ubuntu系统)。 2. **域名...

    基于PHP主机域名雨过星晴二级域名系统的毕业设计,通过使用Apache服务器和MySQL数据库实现系统的实际运行

    3. 设计并实现系统的后端逻辑,包括二级域名的绑定、解绑等功能; 4. 设计并实现系统的安全机制,包括用户身份验证、数据加密等; 5. 进行系统的测试和性能优化,保证系统的稳定性和可靠性。 本毕设的意义在于提供...

    apache的解析域名到目录的方法

    如果需要添加、删除或修改二级域名及其对应的路径,只需更新`vhost.map`文件,无需重启Apache服务器。但要注意,当改变配置后,如果涉及`open_basedir`限制,需要确保新的目录路径在允许的范围内,否则可能会导致PHP...

Global site tag (gtag.js) - Google Analytics