在以前的文章已经说过通过apache 和htaccess来实现二级域名的方法,这里再介绍一种方法,希望对大家有所帮助:
首先,你的拥有一个有泛域名解析的顶级域名,例如: 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
评论