阿里云虚拟主机支持 一个主机绑定多个域名。域名绑定后, 需要先完成解析并备案成功, 网站才能正常访问。
因此, 理论上我们可以在一台虚拟主机上搭建多个网站。
域名绑定
首先, 在阿里云虚拟主机控制台中绑定需要使用的域名。绑定完成并生效后, 便可以通过 .htaccess
文件对不同域名进行目录解析。
解析两个静态网站
阿里云虚拟主机底层使用 Apache 提供网站服务, 因此可以通过 .htaccess
文件来实现灵活的域名解析。
网站 | 类型 | 目录 |
---|---|---|
www.aaa.com | 静态文件 | htdocs/www.aaa.com |
www.bbb.com | Hugo 纯静态 | htdocs/www.bbb.com |
网站源码存放在虚拟主机 htdocs
目录下的子目录
.
└── htdocs
├── .htaccess
├── logreport
├── www.aaa.com
└── www.bbb.com
在 htdocs
目录下建立一个 .htaccess
文件, 内容如下:
# 开启 Rewrite 功能
RewriteEngine On
# 将 www.aaa.com 解析到 /www.aaa.com 目录
RewriteCond %{HTTP_HOST} ^(www.)?aaa.com$
RewriteCond %{REQUEST_URI} !^/www.aaa.com/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /www.aaa.com/$1
RewriteCond %{HTTP_HOST} ^(www.)?aaa.com$
RewriteRule ^(/)?$ www.aaa.com/ [L]
# 将 www.bbb.com 解析到 /www.bbb.com 目录
RewriteCond %{HTTP_HOST} ^(www.)?bbb.com$
RewriteCond %{REQUEST_URI} !^/www.bbb.com/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /www.bbb.com/$1
RewriteCond %{HTTP_HOST} ^(www.)?bbb.com$
RewriteRule ^(/)?$ www.bbb.com/ [L]
这样就能实现:
www.aaa.com
访问/www.aaa.com
目录www.bbb.com
访问/www.bbb.com
目录
PHP 伪静态与静态网站共存
实际生产环境中, 可能需要同时运行 动态网站 (PHP) 和 静态网站 (Hugo 等)
例如, 虚拟主机目录结构如下:
网站 | 类型 | 目录 |
---|---|---|
www.aaa.com | PHP (支持伪静态) | htdocs/www.aaa.com |
www.bbb.com | Hugo 纯静态 | htdocs/www.bbb.com |
htdocs/.htaccess
RewriteEngine On
RewriteBase /
# 将 www.aaa.com 解析到 /www.aaa.com 目录
RewriteCond %{HTTP_HOST} ^www\.aaa\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/www\.aaa\.com/
RewriteRule ^(.*)$ /www.aaa.com/$1 [L,QSA]
# 将www.bbb.com 解析到 /www.bbb.com 目录
RewriteCond %{HTTP_HOST} ^www\.bbb\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/www\.bbb\.com/
RewriteRule ^(.*)$ /www.bbb.com/$1 [L,QSA]
接着, 在每个子目录中分别建立 .htaccess
文件, 内容如下:
htdocs/www.aaa.com/.htaccess
RewriteEngine On
RewriteBase /www.aaa.com
# PHP 伪静态, 把所有非真实文件/目录请求交给 index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /www.aaa.com/index.php [L]
htdocs/www.bbb.com/.htaccess
RewriteEngine On
RewriteBase /www.bbb.com
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /www.bbb.com/index.html [L]
通过这样的配置, 就可以完美的处理 PHP 伪静态规则 和 Hugo 纯静态网站
原文