HTTPS条件重定向问题:排除以/mob结尾的URL
解决HTTPS重定向排除/mob结尾URL的问题
我来帮你搞定这个HTTPS重定向的问题!你想要的效果是:只有当请求的URL不以/mob结尾时,才把HTTP请求跳转到HTTPS,但你当前写的规则没生效,咱们来一步步修正它。
先说说你原有规则的问题
你写的RewriteCond %{REQUEST_URI} !^/(.*)/mob$这个正则有两个小漏洞:
- 它强制要求
/mob前面必须有一个/和任意内容,这就漏掉了http://example.com/mob这种直接在根目录下的/mob请求 - 正则的匹配逻辑过于严格,容易出现意外的不匹配情况
修正后的重定向规则
直接用下面的规则替换你原来的代码就可以了:
RewriteEngine On # 仅对HTTP请求生效,且排除以/mob结尾的URL RewriteCond %{HTTPS} !=on RewriteCond %{REQUEST_URI} !/mob$ RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [L,R=301]
规则详解
咱们拆解一下每个部分的作用:
RewriteEngine On:开启Apache的URL重写引擎,这是所有重定向规则的基础RewriteCond %{HTTPS} !=on:判断当前请求是HTTP协议(非HTTPS),只有满足这个条件才会继续往下走RewriteCond %{REQUEST_URI} !/mob$:这里的!表示“不匹配”,/mob$精准匹配所有以/mob结尾的请求URI,这类请求会被排除在重定向之外RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [L,R=301]:把匹配到的所有请求路径,重定向到对应的HTTPS地址。[L]表示这是最后一条执行的规则,R=301表示这是永久重定向(如果需要临时重定向可以改成R=302)
验证你的示例场景
这个规则完美覆盖你提到的三种情况:
- 访问
http://example.com/(任意内容)/mob:第二个RewriteCond不满足,不会触发重定向 - 访问
http://example.com/(任意内容):两个条件都满足,会自动跳转到对应的HTTPS地址 - 访问
http://example.com:同样满足条件,重定向到https://example.com
额外注意事项
- 确保你的Apache服务器已经开启了
mod_rewrite模块,如果没开的话需要先启用它 - 测试前记得清空浏览器缓存,避免旧的重定向缓存影响测试结果
内容的提问来源于stack exchange,提问作者Tolgay Toklar
相关产品推荐
相关产品推荐

