在以前的文章已经说过通过apachehtaccess来实现二级域名的方法,这里再介绍一种方法,希望对大家有所帮助:

首先,你的拥有一个有泛域名解析的顶级域名,例如: 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。

 

第一步:打开apache的配置文件httpd.conf,去掉LoadModule rewrite_module modules/mod_rewrite.so前面的#号。

第二步:打配置文件尾部加上

RewriteEngine on

RewriteMap lowercase int:tolower

#定义映像文件

RewriteMap vhost txt:/apache/vhost/vhost.map

#处理变名

RewriteCond %{REQUEST_URI} !^/icons/

RewriteCond %{REQUEST_URI} !^/cgi-bin/

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

这里做基于文件的重新映射

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

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

RewriteCond %{REQUEST_URI} ^/cgi-bin/

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

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

RewriteRule ^/(.*)$ %1/cgi-bin/$1

注意:vhost.map文件是域名和空间映像的文件,格式如下:

www.abc.com /vhostusr/www.abc.com

www.xyz.com /vhostuser/www.xyz.com

www.cccbbbb.net /vhostuser/www.ccbbbb.net . .

第三步:保存配置文件,重启apache。在开设可绑定域名的空间时,只要在vhost.map文件里添加相应记录,并建立相应文件夹就OK了

接下来是WINDOWS 里的了

接下来windows下的操作:

1、域名物理地址文件 C:/AppServ/Apache2.2/conf/vhost.map 内容如下:

book.chhua.com C:/AppServ/www/book

xxx.chhua.com   C:/AppServ/www/xxx
2、开启LoadModule rewrite_module modules/mod_rewrite.so

3、域名泛解析

4、以下配置添加到httpd.conf的末尾或VirtualHost中

RewriteLog         logs/rewrite.log RewriteLogLevel    0

RewriteEngine      on

RewriteMap         lowercase int:tolower

RewriteMap         vhost txt:C:/AppServ/Apache2.2/conf/vhost.map

RewriteCond        ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$

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

RewriteRule        ^/(.*)$ %1/$1 [E=VHOST:${lowercase:%{HTTP_HOST}}]
要点:
a.正则^(.+)$ 要和vhost.map的第一部分匹配,在这个例子中^(.+)$是可以匹配book.tiyan.com的
b.正则^(C:/.*)$要和vhost.map的第二部分匹配,在这个例子中^(C:/.*)$是可以匹配C:/AppServ/www/book的
c.RewriteCond        ${vhost:%1} ^(C:/.*)$ 把盘符C:加入到正则中,如果您的web文件不是放在C盘而是E盘,要把C:改为E:
随时更改 vhost.map 来增加、删除、修改你的域名和所指向的实际路径,不用重启 apache

测试通过

 

另外 一种方法

 

rewriteengine on 
rewritecond %{HTTP_HOST} [^.]+.chhua.com$ 
rewriterule ^(.+) %{HTTP_HOST}$1 [C] 
rewriterule ([^.]+).chhua.com(.*) /$1$2 

自由转载,转载请注明: 转载自WEB开发笔记 www.chhua.com

本文链接地址: apache实现二级域名 http://www.chhua.com/web-note4016

相关笔记

更多