成都网站建设,原新盒子网络工作室
专业设计,打造专业品质
Professional design, to create professional quality
利用.htaccess文件搭建无限子站点
来源: 作者:成都网站制作 日期:2011-04-20 17:20:58 点击:0
 
首先,需要把你独立ip做一下解析,如:*.sosbox.cn指向到你的服务器,这样,无论你输入的二级域名是什么
。都同意访问到网站首页。如:test123.sosbox.cn.
然后,在你服务器的根目录下面建立文件.htaccess文件。重点在下面(汗!这里费了我好多时间,写出来,
免的让你们在浪费时间!)
   最近在做一个php商城项目,客户只提供一个虚拟主机,但是他希望每个注册用户都可以得到一个属于自己的
二级域名,通过访问这个二级域名,就可以看到自己的网站。
既然是虚拟主机,那httpd.conf 这个文件肯定是动不了的。于是我用.htaccess来重写url,做成一个伪二级域名
的系统。

在网上,有很多关于 .htaccess建立多站点的例子,如:
 
  .htaccess文件内容如下:(以sosbox.cn域名为例)
RewriteEngine on
 DirectoryIndex index.php index.html index.htm
#让www.xinhezi.cn 访问根目录CMS
 RewriteCond %{HTTP_HOST} ^www.xinhezi.cn$
 RewriteCond %{REQUEST_URI} !^/
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)$ /$1
 RewriteCond %{HTTP_HOST} ^www.xinhezi.cn$
 RewriteRule ^(/)?$ /index.php [L]
#让home.sosbox.cn 访问home目录UcenterHome
 RewriteCond %{HTTP_HOST} ^home.sosbox.cn$
 RewriteCond %{REQUEST_URI} !^/home/
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)$ /home/$1
 RewriteCond %{HTTP_HOST} ^home.sosbox.cn$
 RewriteRule ^(/)?$ home/index.php [L]
#让bbs.sosbox.cn 访问bbs目录论坛
RewriteCond %{HTTP_HOST} ^bbs.sosbox.cn$
 RewriteCond %{REQUEST_URI} !^/wap/
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)$ /bbs/$1
 RewriteCond %{HTTP_HOST} ^bbs.sosbox.cn$
 RewriteRule ^(/)?$ bbs/index.php [L]
----------------------------------------------------------------------------------
上面这些是我从网上找的,你去百度搜,90%都是这样的,这样的其实没问题,当对于我的应用来说,不合适
。因为我需要的是,用户一注册就可以得到一个二级域名,且可以访问,如果像上面那里,我需要在htaccess
里不断的添加映射代码。这样一是不方便,二是htaccess文件就会很庞大。好了,来看看我写的吧。
 
 
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*?)\.sosbox\.cn$
RewriteCond %{REQUEST_URI} !^/users/%1/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /users/%1/$1 [L]
RewriteCond %{HTTP_HOST} ^(.*)\.sosbox\.cn$
RewriteRule ^/(.*?)$ /users/%1/$1 [L]
这个是我最初写的,这个是可以用的(是错误的,后面讲),但是有个问题,当根目录有相同文件名的文
件存在时,就不会到你指定的目录去了。比如:我访问http://test222.sosbox.cn 这样访问,是可以访问到
/users/test222/index.php 这个页面的。但我用http://test222.sosbox.cn/index.php 这样访问,就访问到首页的
index.php去了。这问题刚开始很郁闷,后来仔细看了映射脚本,原来是
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
这两句导致第一个规则没有被应用,所以
http://test222.sosbox.cn/index.php 就等于是 http://sosbox.cn/index.php了。
于是我把这两句去掉,但是服务器却报500错误。这个是为什么,我也不懂。反正是不能去掉。
另外,对于 RewriteCond %{REQUEST_URI} !^/users/%1/,这个其实是个错误的写法。我们先来看看
RewriteCond 的原型: RewriteCond TestString CondPattern [flags]
TestString是一个纯文本的字符串,但是还可以包含反向引用
CondPattern是一个perl兼容的正则表达式
看了原型,才知道,我在CondPattern处写了反向引用语句,这个是错误的。。
 
进过一番周折,我有写了新的规则脚本,(这个是最终可以用的,哎,走了很多弯路),如下:
 
RewriteCond %{HTTP_HOST} ^([a-z0-9_]+)\.sosbox\.cn$ [NC]
RewriteCond %1 !^www
RewriteCond %{REQUEST_URI} !^/users/
RewriteRule ^(.*) /users/%1/$1 [L]
这个里面需要注意的是,RewriteCond %{REQUEST_URI} !^/users/ 这句话必须要,也不知道问什么,去掉后
 
就出现500错误。
 
有了上面这个规则,你就可以无限建立动态子站点。
Address
咨询热线:028-85555316 and 15378179975
地址:成都市青羊区北大街19号正成·财富领地1栋2901(省市政务中心斜对面)
电话:028-85555316 15378179975
网址:http://www.sosbox.cn/  QQ:357898628 snjeso@qq.com
2011 sosbox.cn , All Right Reserved 蜀ICP备09022060号
Share
更多
收缩
  • 电话咨询

  • 4000-855-316
  • 028-85555316
  • 15608036768