如何通过htaccess禁用单个页面及其动态子页的HTTPS跳转
问题原因
你原有配置的路径排除规则写法有误:!/page/* [NC]的正则逻辑是匹配/page后跟随0个或多个/的路径,无法覆盖/page/下的所有动态子路径,同时用THE_REQUEST变量匹配路径也容易出现匹配偏差。
修正后的完整配置
RewriteCond %{HTTP_HOST} !^$ RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTPS}s ^on(s)| RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteCond %{HTTPS} off # 排除所有/page及其子路径的HTTPS跳转 RewriteCond %{REQUEST_URI} !^/page(/.*)?$ [NC] RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
关键修改说明
- 路径匹配变量改用
REQUEST_URI,该变量仅存储请求的路径部分,比包含完整请求头信息的THE_REQUEST匹配更精准 - 调整排除规则为
!^/page(/.*)?$:^/page匹配所有以/page开头的路径(/.*)?表示可选匹配/加任意长度的后续路径,可同时覆盖/page、/page/、/page/dynamic/section所有需要排除的场景
- 测试前请清理浏览器301永久重定向缓存,或使用无痕模式验证新规则,避免浏览器缓存的旧跳转逻辑影响测试结果。
内容的提问来源于stack exchange,提问作者Zubdev
相关产品推荐
相关产品推荐

