核心原理
利用 Apache 服务器的 mod_rewrite 模块(.htaccess 依赖该模块),通过域名匹配规则,将不同域名请求转发到主机内对应的子文件夹,实现 “一个虚拟主机 + 多个子文件夹 = 多个独立网站” 的效果。
前提条件:
1、虚拟主机支持 .htaccess(Apache 环境,Nginx 需用 nginx.conf 配置,本文不涉及);
2、已开通 mod_rewrite 模块(大部分虚拟主机默认开启,可联系服务商确认);
3、所有域名已解析到该虚拟主机的 IP(A 记录 / CNAME 解析);
4、虚拟主机支持 “泛域名绑定” 或已将所有子域名 / 独立域名添加到主机的 “域名绑定列表”(关键!未绑定的域名会被主机拒绝访问)。
操作步骤(分 3 大步)
第一步:准备主机文件夹结构
先在虚拟主机的 根目录(通常是 public_html、wwwroot 或 htdocs)下,为每个网站创建独立子文件夹,建议用域名命名(方便管理)。
示例结构:
假设虚拟主机根目录是 public_html,要搭建 2 个网站:
主域名:aaa.com(对应文件夹 aaa)
子域名 / 独立域名:bbb.com(对应文件夹 bbb)
最终文件夹结构:plaintextpublic_html/ # 主机根目录
├─ aaa/ # 网站1:aaa.com 的根目录(放aaa的程序文件)
│ ├─ index.php
│ └─ …(其他文件)
├─ bbb/ # 网站2:bbb.com 的根目录(放bbb的程序文件)
│ ├─ index.html
│ └─ …(其他文件)
└─ .htaccess # 核心配置文件(需手动创建)
注意:
文件夹权限建议设为 755,文件权限 644(避免权限问题导致访问失败);
若需搭建更多网站,重复创建对应子文件夹即可(如 ccc.com 对应 ccc 文件夹)。
第二步:配置.htaccess 文件(核心)
在虚拟主机 根目录(public_html)下,新建一个文件,命名为 .htaccess(注意前面有英文点,无后缀名),复制以下代码并修改适配你的域名和文件夹。
通用配置模板(支持多域名 + 子域名)
# 开启 mod_rewrite 模块(若已开启可省略,但建议保留)
RewriteEngine On
# 防止目录浏览(避免他人直接访问子文件夹列表)
Options -Indexes
# 规则1:绑定 aaa.com(主域名)到 aaa 文件夹
RewriteCond %{HTTP_HOST} ^(www\.)?aaa\.com$ [NC] # 匹配aaa.com或www.aaa.com,NC表示不区分大小写
RewriteCond %{REQUEST_URI} !^/aaa/ # 排除已包含/aaa/的请求(避免循环)
RewriteRule ^(.*)$ /aaa/$1 [L] # 转发所有请求到aaa文件夹,L表示终止后续规则
# 规则2:绑定 bbb.com(独立域名)到 bbb 文件夹
RewriteCond %{HTTP_HOST} ^(www\.)?bbb\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/bbb/
RewriteRule ^(.*)$ /bbb/$1 [L]
# 规则3:绑定子域名(如 blog.aaa.com)到 blog 文件夹(可选)
RewriteCond %{HTTP_HOST} ^blog\.aaa\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/blog/
RewriteRule ^(.*)$ /blog/$1 [L]
# (可选)默认网站:若访问未匹配的域名,转发到默认文件夹(如aaa)
RewriteCond %{REQUEST_URI} !^/aaa/
RewriteRule ^(.*)$ /aaa/$1 [L]
配置说明(关键修改点):
1、域名匹配规则:^(www\.)?aaa\.com$
(www\.)? 表示支持 aaa.com 和 www.aaa.com(可选,若只想支持不带 www,删除 (www\.)?);
替换 aaa\.com 为你的实际域名(注意域名中的 . 要加反斜杠 \ 转义)。
2、文件夹映射:RewriteRule ^(.*)$ /aaa/$1 [L]
把 /aaa/ 替换为你对应的子文件夹名称(如 /bbb/ 对应 bbb.com);
$1 表示保留原始请求路径(如访问 aaa.com/about,会转发到 aaa/about)。
3、规则顺序:优先匹配具体域名,最后放默认规则(避免默认规则覆盖具体域名)。
第三步:测试与问题排查
测试步骤:
1、确保所有域名已完成解析(可通过 ping 域名 验证是否指向主机 IP);
2、确保所有域名已添加到虚拟主机的 “域名绑定列表”(登录主机控制面板,找到 “域名绑定” 功能添加);
3、分别访问每个域名(如 aaa.com、www.bbb.com),确认是否正确打开对应文件夹的网站(如 aaa 文件夹的 index.php)。
常见问题排查:
1、访问域名跳转到主机默认页面 / 404:
检查域名是否已绑定到虚拟主机(未绑定会被主机拒绝);
检查 .htaccess 文件名是否正确(必须是 .htaccess,无后缀,注意英文点);
检查 mod_rewrite 是否开启(联系服务商确认,或在根目录建 phpinfo.php,内容 <?php phpinfo(); ?>,访问后搜索 mod_rewrite 看是否启用)。
2、访问出现 “500 Internal Server Error”:
检查 .htaccess 语法错误(如括号不匹配、域名未转义);
去掉多余的规则,逐行测试(比如先只保留一个域名规则,正常后再添加其他)。
3、网站内部链接失效(如 /about 跳转到 404):
确保网站程序的 “站点根目录” 设置正确(如 WordPress 需在后台 “设置 – 常规” 中,将 “站点地址” 和 “WordPress 地址” 设为当前域名,而非文件夹路径);
静态文件(CSS/JS/ 图片)路径建议用相对路径(如 ./css/style.css)或绝对路径(如 https://aaa.com/css/style.css)。
4、子文件夹可以直接访问(如 aaa.com/bbb/ 能看到 bbb 网站):
已通过 Options -Indexes 禁止目录浏览,若想完全屏蔽直接访问子文件夹,可在每个子文件夹下也创建 .htaccess,添加:apacheRewriteEngine On
RewriteCond %{HTTP_HOST} !^对应的域名$ [NC]
RewriteRule ^(.*)$ https://对应的域名/$1 [R=301,L]
(如 bbb 文件夹下的 .htaccess,限制只有 bbb.com 能访问,其他域名访问 /bbb/ 会跳转到 bbb.com)。
进阶优化(可选)
HTTPS 配置(强制跳转):
若已申请 SSL 证书,可在 .htaccess 开头添加以下规则,强制所有域名跳转到 HTTPS:
# 强制HTTPS(需先安装SSL证书)
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
添加 WWW / 去掉 WWW 跳转:统一域名格式(如强制 aaa.com 跳转到 www.aaa.com),在对应域名规则前添加:
# 强制aaa.com跳转到www.aaa.com(HTTPS环境)
RewriteCond %{HTTP_HOST} ^aaa\.com$ [NC]
RewriteRule ^(.*)$ https://www.aaa.com/$1 [R=301,L]
支持多后缀索引文件:若网站默认首页不是 index.php(如 index.html、default.php),可添加:
DirectoryIndex index.html index.php default.php
总结
通过 .htaccess 绑定文件夹实现多网站的核心是:域名解析→主机绑定→.htaccess 规则转发。只要虚拟主机支持 mod_rewrite 和多域名绑定,就能用这种方式低成本搭建多个独立网站,无需额外购买虚拟主机。
如果是 Nginx 环境(虚拟主机用 Nginx 服务器),则不能用 .htaccess,需在 nginx.conf 中配置 server 块转发(原理类似,可联系服务商协助配置)。

