n(n>1)级域名自动生成并绑定的说明

不指定
2008-7-17 18:27 by:果面 PC应用 » 网络应用 本站原创 | |
一、启用该功能的要求

1.必须是apache服务器

2.apache必须已经打开mod_rewrite


如果windows下在httpd.conf中将附图上这行的注释符去掉就行了


如果您是*nix下编译安装,可以参考这个编译参数,这样会把重写模块编译进apache核心中,加快处理速度
./configure \
--prefix=/usr/local/apache \
--with-mpm=prefork \
--enable-so \r/>--enable-rewrite=static \
--enable-track-vars

3.网站的域名必须做泛解析,就是让*.site.com都能指向的您服务器

本地测试可以修改hosts文件,模拟泛解析



二、配置过程:

1.配置apache的重写表,重写表保存有n级域名和子店实际物理地址的映射关系。

在include/mall_config.php中
$RewriteMap_Url="rmap/vhost.map";
设置apache重写表的保存地址,它的位置是相对与syssite目录。
重写表的格式如下
n级域名 子店的实际物理地址
样例:

shop1.www.xuni.com D:/Server/wwwroot/shopexm47/syssite/home/shop/00/00/01

2.在apache的配置文件httpd.conf中启用rewrite map功能

打开apache的配置文件httpd.conf在末尾添加以下配置信息


*nix系统的内容如下

RewriteLog         logs/rewrite.log
RewriteLogLevel    0
RewriteEngine      on
RewriteMap         lowercase int:tolower
RewriteMap         vhost txt:/var/www/html/syssite/rmap/vhost.map
RewriteCond        ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
RewriteCond        ${vhost:%1} ^(/.*)$
RewriteRule        ^/(.*)$ %1/$1 [E=VHOST:${lowercase:%{HTTP_HOST}}]

       Options -Indexes FollowSymLinks
       AllowOverride none
       Order deny,allow
       Deny from all



windows系统的内容如下

RewriteLog         logs/rewrite.log
RewriteLogLevel    0
RewriteEngine      on
RewriteMap         lowercase int:tolower
RewriteMap         vhost txt:D:/Server/wwwroot/shopexm47/syssite/rmap/vhost.map
RewriteCond        ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
RewriteCond        ${vhost:%1} ^(D:/.*)$
RewriteRule        ^/(.*)$ %1/$1 [E=VHOST:${lowercase:%{HTTP_HOST}}]

       Options -Indexes FollowSymLinks
       AllowOverride none
       Order deny,allow
       Deny from all




附图中的

RewriteLogLevel    5

是用于调试用的,这样可以在logs/rewrite.log中看到形如:

127.0.0.1 - - [10/May/2007:11:33:42 +0800] [shop1.www.xuni.com/sid#2cc240][rid#5934a80/initial] (4) RewriteCond: input='shop1.www.xuni.com' pattern='^(.+)$' => matched
127.0.0.1 - - [10/May/2007:11:33:42 +0800] [shop1.www.xuni.com/sid#2cc240][rid#5934a80/initial] (5) map lookup OK: map=vhost[txt] key=shop1.www.xuni.com -> val=D:/Server/wwwroot/shopexm47/syssitehome/shop/00/00/01
127.0.0.1 - - [10/May/2007:11:33:42 +0800] [shop1.www.xuni.com/sid#2cc240][rid#5934a80/initial] (4) RewriteCond: input='D:/Server/wwwroot/shopexm47/syssitehome/shop/00/00/01' pattern='^(D:/.*)$' => matched
127.0.0.1 - - [10/May/2007:11:33:42 +0800] [shop1.www.xuni.com/sid#2cc240][rid#5934a80/initial] (2) rewrite '/index.php' -> 'D:/Server/wwwroot/shopexm47/syssitehome/shop/00/00/01/index.php'

以上的log片段就是一个rewrite的过程。

设为5是用于调试的,实际使用环境下务必将RewriteLogLevel 设置为0,否则rewrite的log很快将您的磁盘撑爆!


要点:

1.正则^(.+)$ 要和vhost.map的第一部分匹配,在这个例子中^(.+)$是可以匹配shop1.www.xuni.com的

2.正则^(D:/.*)$要和vhost.map的第二部分匹配,在这个例子中^(D:/.*)$是可以匹配D:/Server/wwwroot/shopexm47/syssite/home/shop/00/00/01的

3.vhost.map的地址要用*nix like的格式,就是要用/表示目录,而不是windows的\

所以win的主机要用
RewriteCond        ${vhost:%1} ^(D:/.*)$
把盘符D:加入到正则中,如果您的web文件不是放在D盘而是E盘,要把D:改为E:。
而*nix没有盘符,所以用
RewriteCond        ${vhost:%1} ^(/.*)$


如果vhost.map不存在,要自己用touch建一个,否则apache无法启动

4.这段配置信息的位置,一般放在httpd.conf的末尾。但是如果您的总站是用VirtualHost进行绑定,请将以上的配置信息放在第一个VirtualHost的段中。

样例:

   DocumentRoot   /www/docs/host.foo.com
   ServerName  host.foo.com
   ErrorLog  logs/host.foo.com-error_log
   TransferLog  logs/host.foo.com-access_log

   RewriteLog         logs/rewrite.log
   RewriteLogLevel   0
   RewriteEngine      on
   RewriteMap         lowercase int:tolower
   RewriteMap         vhost txt:/var/www/html/syssite/rmap/vhost.map
   RewriteCond        ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
   RewriteCond        ${vhost:%1} ^(/.*)$
   RewriteRule        ^/(.*)$ %1/$1 [E=VHOST:${lowercase:%{HTTP_HOST}}]
  
       Options -Indexes FollowSymLinks
       AllowOverride none
       Order deny,allow
       Deny from all
  

评论(0) 引用(0) 阅读(2008)