# 使用.htaccess地址重写实现多站支持
我的阿里云虚拟主机当前只放了一个站点,使用率一直非常低,最近想能不能再搬一个静态站点上去,毕竟虚拟主机的服务器带宽是非常高的,比我的服务器小水管快了百倍不止。
但翻遍了虚拟主机控制台,发现其本身是没有提供相关功能的,所以尽管一个虚拟主机最多支持绑定20个域名,但是这20个域名默认都是指向根目录的。
不做特殊配置的话,子站倒是可以通过二级路径支持,比如:https://www.guitu18.com/note/,但是这样体验很不好,我想做成可以通过二级域名访问子站,比如:https://note.guitu18.com/。
之后查了下文档,只要服务器支持我们是可以通过.htaccess
文件做地址重写的,比如我的配置如下:
<IfModule mod_rewrite.c>
# 开启地址重写
RewriteEngine On
# 强制开启HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://www.guitu18.com/$1 [L,R=301]
# 强制开启HTTPS
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.guitu18.com/$1 [L,R=301]
# 顶级域名跳转 www
RewriteCond %{HTTP_HOST} ^guitu18\.com$ [NC]
RewriteRule ^(.*)$ https://www.guitu18.com/$1 [L,R=301]
# 子站点重写路径到二级目录
RewriteCond %{HTTP_HOST} ^note\.guitu18\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/note/
RewriteRule ^(.*)$ note/$1?Rewrite [L,QSA]
# 404页面
ErrorDocument 404 /404.html
<IfModule mod_rewrite.c>
前面两个是强制跳转HTTPS,第三个是顶级域跳转www
的,第四个是子站点配置,最后一个是404页面配置
note.guitu18.com
:子站点域名,中间的\.
为转义,因为.
是通配符,所以理论上不转义也能用。
/note/
:上面note.guitu18.com
对应的子站点根目录。
理论上是可以绑定N多个子站点的,只需要将这三行配置复制多条,修改域名和目录即可,这样就能物尽其用了。