如何通过.htaccess禁止主域路径访问子站并实现HTTPS跳转
解决方案:同时实现域名隔离与HTTPS强制跳转
完全可以同时实现这两个需求,咱们只需要把域名隔离的规则和你现有的HTTPS跳转规则结合起来,放在每个子站点的.htaccess文件里就行。下面是具体的步骤和代码:
核心思路
我们要先判断请求的主机名是否是当前站点的独立域名:
- 如果不是(比如用
example.com/domains/mydomain1这种路径访问),直接返回403/404错误,阻止访问; - 如果是正常的独立域名访问,再执行你原有的HTTP转HTTPS规则。
具体配置(以mydomain1.com为例)
打开example.com/domains/mydomain1/.htaccess文件,替换成以下内容:
# 1. 禁止非独立域名访问,返回403错误(也可以改成404) RewriteCond %{HTTP_HOST} !^(www\.)?mydomain1\.com$ [NC] RewriteRule ^ - [R=403,L] # 2. 原有HTTP转HTTPS跳转规则 RewriteCond %{HTTPS} off RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
规则解释
域名隔离部分:
RewriteCond %{HTTP_HOST} !^(www\.)?mydomain1\.com$ [NC]:检查请求的主机名是否是mydomain1.com或www.mydomain1.com,!表示“不匹配”,[NC]表示不区分大小写(兼容大写域名的情况)。RewriteRule ^ - [R=403,L]:如果上面的条件满足(即使用了非指定域名访问),直接返回403禁止访问;L表示停止执行后续规则,避免多余的跳转。- 如果你想返回404(让访问者误以为路径不存在),把
R=403改成R=404即可。
HTTPS跳转部分:
- 这就是你原有的规则,只有当请求是HTTP且主机名正确时,才会执行跳转,完全不影响原有功能。
批量配置其他站点
对mydomain2.com及其他子站点,只需要复制上面的代码,把mydomain1\.com替换成对应的域名即可(比如mydomain2\.com)。
注意事项
- 确保你的主机支持
mod_rewrite模块(大部分主流托管服务商都默认开启); - 如果你的站点有其他Rewrite规则,把域名隔离的规则放在最顶部,优先执行,避免冲突。
这样配置后,任何人试图通过example.com/domains/mydomain1这种路径访问时,都会得到403/404错误,而通过mydomain1.com或www.mydomain1.com访问时,会自动跳转到HTTPS,完美满足你的需求。
内容的提问来源于stack exchange,提问作者Amit Singh
相关产品推荐
相关产品推荐

