虚拟主机 Apache 一个目录划分多个域名使用

apache 下的空间,其实很容易实现一个目录下,绑定多个网站域名。

这都要说到想当初,在阿里云域名转入后,提示了一个广告,允许低价购买共享虚拟主机,这个阿里云的空间一直就保留着。现在续费大概也就是每年 60 块左右。虽然是垃圾配置,也不能弄 https,但是国内访问速度绝对一流,做个博客还是很适合的。

本身虚拟主机是 apache + php 的方案,也带有 mySql,但是我还是用了 jekyll 静态页面博客。这么说就远了…回归主题。

如何配置

首先要能通过 ftp 连接到虚拟主机,因为不是 vps 机器,通过 ftp 是我们和虚拟主机唯一的通讯方式…

在网页目录下,可以上传一个 .htaccess 文件。

这个有技巧,有的系统不方便创建和操作(比如 Mac 和 linux 会隐藏,Windows 下貌似是非法文件),可以直接创建一个 htaccess 文件,上传到 ftp 后,再进行改名。

访问地址 301,302 跳转

比如我可以配置凡是访问 /about 路径,直接访问 aboutme/about.php

1
2
Redirect permanent about aboutme/about.php
order deny,allow

根据主机头访问不同目录

这才是这篇文章的重点。

我希望用户访问 yukapril.com 后,访问 yukapril_com 目录;

访问 my.yukapril.com 后,访问 my_yukapril_com 目录。

1
2
3
4
5
6
7
8
9
10
11
RewriteEngine on

RewriteCond %{HTTP_HOST} yukapril.com
RewriteCond %{REQUEST_URI} !^/yukapril_com
RewriteRule ^(.*)$ /yukapril_com/$1

RewriteCond %{HTTP_HOST} my.yukapril.com
RewriteCond %{REQUEST_URI} !^/my_yukapril_com
RewriteRule ^(.*)$ /my_yukapril_com/$1

order deny,allow

每配置一个域名,复制三行就行了。

.htaccess 还有很多玩法,可以自行搜索看看~

小问题

按照上面这么配置,也会有一些体验上的问题。

比如,你的网站有链接 http://yukapril.com/2018/01/01.html,此时如果你访问 http://yukapril.com/2018 那么肯定是 403 错误(Forbidden)。

此时因为我是静态页面,没有进行错误处理,所以错误消息会提示 The requested URL /yukapril_com/2018/ was not found on this server.

这个我就不会直接配置了。

一般虚拟主机商支持配置一个通用的错误页面,你的各个域名,如果相同错误码,错误页面也相同,那就好办。直接配置下就行了。但是如果不同的域名要求错误页不同,这个需要变换思路解决。

变相的解决方案是,在每个域名对应目录里面,再次添加 .htaccess 文件。

大致写法如下:

1
2
3
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
order deny,allow