`
butter
  • 浏览: 125662 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

简单快速的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  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 
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 
    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

<!--EndFragment-->
分享到:
评论

相关推荐

    最简单快速的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编程语言进行开发。在互联网上,尤其是大型网站或服务提供商,二级域名常用于组织内容、提供不同...

    二级域名分发系统PHP源码-附安装教程.zip

    这个系统可以帮助网站管理员轻松地为用户提供个性化或特定功能的二级域名,例如子站点、用户个人空间或其他服务。在这个"二级域名分发系统PHP源码-附安装教程.zip"压缩包中,你将找到实现这一功能的所有源代码以及...

    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. 进行系统的测试和性能优化,保证系统的稳定性和可靠性。 本毕设的意义在于提供...

Global site tag (gtag.js) - Google Analytics