Apache .htaccess重写规则条件配置问题求助
解决仅主域名和www子域名重定向到HTTPS的问题
我明白你的需求了——只让example.de和www.example.de的HTTP请求跳转到HTTPS,而x.example.de和y.example.de要保持HTTP访问对吧?你的现有规则问题出在逻辑方向搞反了:你用了排除x/y的规则,但这会导致除了这两个子域名之外的所有域名(比如随便一个z.example.de)都被强制HTTPS,这显然不是你想要的。
正确的思路应该是精准匹配你需要跳转的域名,而不是排除不需要的。下面是修正后的规则:
<IfModule mod_rewrite.c> RewriteEngine On # 仅当HTTPS未开启时执行 RewriteCond %{HTTPS} !=on [NC] # 精准匹配主域名和www子域名 RewriteCond %{HTTP_HOST} ^(www\.)?example\.de$ [NC] # 重定向到对应的HTTPS地址,保留请求路径 RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L] </IfModule>
规则细节解释:
^(www\.)?example\.de$:这个正则会精确匹配两种目标域名——example.de(www\.部分可选)和www.example.de,[NC]标记确保匹配不区分大小写(域名本身大小写不敏感,加了更稳妥)。- 我在
RewriteRule里加了$1,这能保证请求路径不丢失(比如http://example.de/page1会被正确跳转到https://example.de/page1,而不是直接跳转到根域名)。 R=301是永久重定向,适合生产环境;如果还在测试阶段,可以改成R=302临时重定向,避免浏览器缓存错误规则。
验证效果:
- ✅
http://example.de→ 成功跳转到https://example.de - ✅
http://www.example.de→ 成功跳转到https://www.example.de - ❌
http://x.example.de→ 保持HTTP访问,不触发重定向 - ❌
http://y.example.de→ 保持HTTP访问,不触发重定向 - ❌
http://z.example.de→ 保持HTTP访问,不触发重定向(完全符合你只针对主域名和www跳转的需求)
这样调整后就完全满足你的要求啦!
内容的提问来源于stack exchange,提问作者VicGeb
相关产品推荐
相关产品推荐

