虚拟主机通常非常便宜,不过很多虚拟主机运营商不允许虚拟主机绑定子目录,禁止为虚拟主机建议子站,想要建几个网站就要开几个虚拟主机。
Apache虚拟主机可以使用.htaccess建立子站点,将来自不同域名(二级域名或顶级域名不限)的请求分发到不同的子站点去。
.htaccess虚拟主机子目录绑定思路:为一个虚拟主机绑定多个域名,为每个域名建立一个子目录,在.htaccess中判断客户端访问的域名,然后将请求分发到子站点。
需要注意以下几个问题
- 必须保证所有子站请求都经过虚拟主机根目录中转,而不是直接访问子目录中的文件
- 必须禁止各个子站互相访问自身以外的文件
- 虚拟主机根目录只存放子站目录,不将乱七八糟的文件放到根目录
以下是Apache使用.htaccess为虚拟主机子目录搭建子站的具体实现。
假设D:\server\www为虚拟主机根目录,我们将域名wuxiancheng.cn和0816.host都绑定到虚拟主机,并且在虚拟主机根目录建立两个文件夹,文件夹名称分别为wuxiancheng.cn和0816.cn,在根目录和两个子目录分别各新建一个.htaccess文件。
D:\server\www\.htaccess文件内容如下
- RewriteEngine On
- RewriteCond "%{HTTP_HOST}" "wuxiancheng\.cn" [NC]
- RewriteRule ^/?(.*)$ wuxiancheng.cn/$1 [L,QSA]
- RewriteCond "%{HTTP_HOST}" "0816\.host" [NC]
- RewriteRule ^/?(.*)$ 0816.host/$1 [L,QSA]
复制代码 D:\server\www\wuxiancheng.cn\.htaccess文件内容如下- RewriteEngine On
- RewriteBase /
- RewriteCond "%{HTTP_HOST}" "!wuxiancheng\.cn" [NC]
- RewriteRule ^ - [F,L]
- RewriteCond expr "env('REDIRECT_STATUS') <= 0" [NC]
- RewriteRule ^ / [L,R=301]
复制代码 D:\server\www\0816.host\.htaccess文件内容如下- RewriteEngine On
- RewriteBase /
- RewriteCond "%{HTTP_HOST}" "!0816\.host" [NC]
- RewriteRule ^ - [F,L]
- RewriteCond expr "env('REDIRECT_STATUS') <= 0" [NC]
- RewriteRule ^ / [L,R=301]
复制代码 现在,访问不同的域名即可访问不同的子站点,也就实现了.htaccess绑定子目录子站点。
如果还有其他URL重写的需要,只要将其他规则添加到对应子目录的.htaccess文件中去即可。 |
|