文章目录
  1. 1. 前言
  2. 2. 方案一
  3. 3. 方案二
  4. 4. 参考资料
  5. 5. 文档信息

前言


因为最近需要用到域名备案,感觉买个 VPS 或 ECS 不划算,虚拟主机比较便宜,有些厂商提供虚拟主机还可以免费使用,但是免费的商品终究有些或多或少的限制,比如:不支持多站点多域名绑定等。为了在一个虚拟主机上实现多站点多域名的需求,经过多方查找资料,就有了这篇文章。

需求:

  • 一个虚拟主机上实现多站点,多域名绑定;
  • 一个域名对应一个站点,禁止其他域名访问站点;
  • 当访问一个域名时,浏览器中url不会变化;

在查找资料之前,想到有 3 中实现方法;

  1. 通过nginx 或 apache 站点配置文件
  2. 在首页通过 js 或 其他代码 进行域名跳转
  3. 在 .htaccess 在进行重新规则

方案一


在站点根目录使用 .htaccess 文件实现,需要开启伪静态设置,有些虚拟主机是默认关闭的,需要手动开启,若未开启,可能会出现 500 内部配置错误等问题。在虚拟主机根节点 .htaccess 文件中添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# 绑定域名 devhitao.com 及 www.devhitao.com 到 hitao 目录
RewriteCond %{HTTP_HOST} ^(www\.)?devhitao\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/devhitao.com/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ devhitao.com/$1
RewriteCond %{HTTP_HOST} ^(www\.)?devhitao\.com$ [NC]
RewriteRule ^(/)?$ hitao/index.html [L]

# 绑定域名 domain1.com 及 www.domain1.com 到 domain1Site 目录
RewriteCond %{HTTP_HOST} ^(www\.)?domain1\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/domain1.com/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ domain1.com/$1
RewriteCond %{HTTP_HOST} ^(www\.)?domain1\.com$ [NC]
RewriteRule ^(/)?$ domain1Site/index.html [L]
</IfModule>

为了防止其他域名进行访问 domain1 目录,可以在其子站根目录下 .htaccess 文件中,添加如下配置:

1
2
3
4
5
6
7
<IfModule mod_rewrite.c>
RewriteEngine On

# 禁止通过非本网站域名访问
RewriteCond %{HTTP_HOST} !^(www.)?domain1.com$ [NC]
RewriteRule ^.*$ [L,r=404]
</IfModule>

切记:不要添加 [R] 标识,R=301 会让浏览器进行再次跳转请求,所以将其去掉。

参考资料


方案二


请参考 阿里云 给出的方案;

参考资料


文档信息


  • 版权声明:自由转载-保持署名-非商用-非衍生 ( CC BY-NC-ND 4.0 )
文章目录
  1. 1. 前言
  2. 2. 方案一
  3. 3. 方案二
  4. 4. 参考资料
  5. 5. 文档信息