通过 .htaccess 文件将域名解析到多个目录

对于一台主机而言,同时搭建两个网站可以更好的利用主机的剩余资源,但是,有些主机供应商并不提供子域名解析,或者需要解析到不同的域名,对于这种情况,可以通过建立 .htaccess 文件加入 rewrite 函数的方法实现,本方法仅适用基于 Apache 搭建的服务器,基于 nginx 搭建的服务器需要在 nginx.conf 中添加 rewrite 函数(之后另行介绍)。

假设有两个域名 www.a.comwww.b.com ,分别需要解析到主机 /a 和 /b 目录。

则首先需要在 / 目录建立 .htaccess 文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 开启Rewrite功能
RewriteEngine On
# 将www.a.com解析到/a目录
RewriteCond %{HTTP_HOST} ^(www.)?a.com$
RewriteCond %{REQUEST_URI} !^/a/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /a/$1
RewriteCond %{HTTP_HOST} ^(www.)?a.com$
RewriteRule ^(/)?$ a/ [L]
# 将www.b.com解析到/b目录
RewriteCond %{HTTP_HOST} ^(www.)?b.com$
RewriteCond %{REQUEST_URI} !^/b/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /b/$1
RewriteCond %{HTTP_HOST} ^(www.)?b.com$
RewriteRule ^(/)?$ b/ [L]

根据具体需要替换上面的域名和目录。

之后分别在两个子目录 /a 和 /b 建立 .htaccess 文件,内容分别如下:

/a/.htaccess

1
2
3
4
5
RewriteEngine On
RewriteBase /a
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /a/ [L]

/b/.htaccess

1
2
3
4
5
RewriteEngine On
RewriteBase /b
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /b/ [L]

完成以上步骤,则可以实现 www.a.com 访问 /a 而 www.b.com 访问 /b 的功能。


通过 .htaccess 文件将域名解析到多个目录
https://blog.yuhaogao.com/2016/04/14/通过-.htaccess-文件将域名解析到多个目录/
作者
宇皓
发布于
2016年4月15日
许可协议