一、启用该功能的要求
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
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