z0y5sit

虚拟主机用.htaccess 绑定文件夹实现多网站(共享 IP + 单主机)详细教程

核心原理

利用 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 块转发(原理类似,可联系服务商协助配置)。

z0y5sit
0
显示验证码
没有账号?注册  忘记密码?

社交账号快速登录

在线客服
阿晨
我们将通过邮件尽快回复。
2026-02-03 12:37:27
有问题,请请点下面图标留言!
您的工单我们已经收到,我们将会通过邮件尽快跟您联系!
取消

选择聊天工具: