# 使用.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多个子站点的,只需要将这三行配置复制多条,修改域名和目录即可,这样就能物尽其用了。