分类 虚拟主机 下的文章

目标:使用一台虚拟主机搭建多个网站
前提:虚拟主机支持开启伪静态,而且可以绑定多个域名(一般虚拟主机都支持)
思路:通过自定义.htaccess,实现不同域名访问不同站点目录
操作流程如下:
1.域名解析与绑定,虚拟主机一般情况下使用cname解析,将要创建站点的域名做好cname解析
2.根目录(站点存放目录,根据虚拟主机具体情况,一般是类似www/web/home之类的)创建.htaccess文件,
本文仅以域名test1.com对应站点目录test1,test2.com对应站点目录test2,test3.com对应站点目录test3为例;
根目录下.htaccess文件代码如下:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

test1.com

RewriteCond %{HTTP_HOST} ^(www.)?test1.com$ [NC]
RewriteCond %{REQUEST_URI} !^/test1/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ test1/$1 [L,QSA]

没有输入文件名的默认到到首页

RewriteCond %{HTTP_HOST} ^(www.)?test1.com$ [NC]
RewriteRule ^(/)?$ test1/index.html

test2.com

RewriteCond %{HTTP_HOST} ^(www.)?test2.com$ [NC]
RewriteCond %{REQUEST_URI} !^/test2/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ test2/$1 [L,QSA]

没有输入文件名的默认到到首页

RewriteCond %{HTTP_HOST} ^(www.)?test2.com$ [NC]
RewriteRule ^(/)?$ test2/index.html

test3.com

RewriteCond %{HTTP_HOST} ^(www.)?test3.com$ [NC]
RewriteCond %{REQUEST_URI} !^/test3/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ test3/$1 [L,QSA]

没有输入文件名的默认到到首页

RewriteCond %{HTTP_HOST} ^(www.)?test3.com$ [NC]
RewriteRule ^(/)?$ test1/index.html

</IfModule>

3.站点目录下分别创建.htaccess文件,实现站点域名访问限制(例如:test1.com只能访问test1目录不能访问test2/test3目录)
.htaccess文件代码如下,textx仅作示范,对应目录下testx分别改为test1/test2/test3:

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

只许绑定的域名访问

RewriteCond %{HTTP_HOST} !^(www.)?testx.com$ [NC]

RewriteRule (.*) testx/$1 [L,R=301]

</IfModule>

如上就是使用一台虚拟搭建多个网站的操作方法。

场景:虚拟主机根目录下安装了wordpress,同时根目录下创建了多个子目录,用于搭建其他站点,开启伪静态,.htaccess文件中定义了对应域名访问对应子目录,发现htaccess会自动还原如下:

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

搜索类似问题,应该是点击wordpress固定链接以后.htaccess文件被自动还原
尝试在#END WordPress后面(另起一行),添加自定义的域名-目录访问规则:

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# 绑定www.test1.com 到 test1 目录

RewriteCond %{HTTP_HOST} ^www.test1.com$ [NC]
RewriteCond %{REQUEST_URI} !^/test1/
RewriteRule ^(.*)$ test1/$1?Rewrite [L,QSA]

# 绑定www.test2.com到 test2目录

RewriteCond %{HTTP_HOST} ^www.test2.com$ [NC]
RewriteCond %{REQUEST_URI} !^/test2/
RewriteRule ^(.*)$ test2/$1?Rewrite [L,QSA]

</IfModule>

经测试,暂时未出现问题,特此记录一下。
补充说明:一台虚拟主机搭建多个站点,实现多个域名访问对应虚拟主机跟目录下子目录站点,前提条件需要开启伪静态,PHP网站伪静态使用的是Apache的Rewrite模块。一般主要是通过具体定义好.htaccess文件来实现。