apache 不重启添加删除虚拟主机及二级域名设置

2012 年 4 月 22 日 2 条评论 2.62k 次阅读 0 人点赞

 

在linux系统下的配置方法:
首先找到你的apache配置文件httpd.conf
我们打开apache的重新功能,去掉下面这段前面的#号
LoadModule rewrite_module modules/mod_rewrite.so

在 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.a.com /usr/local/www/www_a_com
www.b.com /usr/local/www/www_b_com
www.c.com /usr/local/www/www_c_com

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

最后,在你的网站根目录 /usr/local/www/下,创建对应网站的目录:
www_a_com, www_b_com, www_c_com 等等,理论上可以无限,但是要跟你的配置文件一一对应。

这样,通过浏览器,访问 www_a_com 时,实际上访问的就是 /usr/local/www/www_a_com目录下的文件。
同理,访问 www_b_com 实际上访问的就是 /usr/local/www/www_b_com 目录下的文件。
而且,你可以随时更改 vhost.map 来增加、删除、修改你的网站域名和所指向的实际路径,而不需要重启 apache。

接下来是windows系统下的操作:
1、域名物理地址文件 D:/AppServ/Apache2.2/conf/vhost.map
内容如下:
www.a.com D:/wwwroot/www_a_com
www.b.com D:/wwwroot/www_b_com
www.c.com D:/wwwroot/www_c_com
2、开启LoadModule rewrite_module modules/mod_rewrite.so
3、域名解析好后
4、把以下配置信息添加到apache配置文件httpd.conf的末尾或者添加到VirtualHost中也行
RewriteLog         logs/rewrite.log
RewriteLogLevel    0
RewriteEngine      on
RewriteMap         lowercase int:tolower
RewriteMap         vhost txt:D:/AppServ/Apache2.2/conf/vhost.map
RewriteCond        ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
RewriteCond       ${vhost:%1} ^(D:/.*)$
RewriteRule        ^/(.*)$ %1/$1 [E=VHOST:${lowercase:%{HTTP_HOST}}

注意:
a.正则^(.+)$ 要和vhost.map的第一部分匹配,在这个例子中^(.+)$是可以匹配www.a.com的
b.正则^(D:/.*)$要和vhost.map的第二部分匹配,在这个例子中^(D:/.*)$是可以匹配D:/wwwroot/www_a_com的
c.RewriteCond      ${vhost:%1} ^(D:/.*)$
把盘符D:加入到正则中,如果您的web文件不是放在D盘而是E盘,要把D:改为E:

这样我们就可以随时更改 vhost.map 文件来增加、删除、修改你的域名和所指向的实际路径,不用重启 apache。

 

备注:不过目前还有一个问题没有解决,就是安全问题。这样设置目录都是共享的,都有权限。

雷雷

这个人太懒什么东西都没留下

文章评论(2)

  • 邯郸论坛

    收藏了。

    2012 年 5 月 6 日
  • 邯郸seo

    转载了。

    2012 年 5 月 6 日
  • (Spamcheck Enabled)