HTTPS重定向配置问题:需排除含"mob"后缀的URL
解决Apache URL不含"mob"后缀时强制HTTPS重定向的问题
嘿,我看你遇到了Apache重定向规则的问题——想要让所有不含/mob后缀的HTTP请求自动跳转到HTTPS,但之前的配置没生效对吧?咱们来把这个问题搞定!
问题出在哪?
你之前写的RewriteCond %{REQUEST_URI} !^/(.*)/mob$这个正则表达式有漏洞:它只能匹配中间带路径、最后以/mob结尾的URL(比如http://example.com/foo/mob),但如果是根目录下直接的http://example.com/mob就匹配不到,而且正则的写法也没必要这么复杂。
修正后的完整配置
直接用下面的配置替换你原来的代码,就能完美实现你的需求:
RewriteEngine On # 仅当当前不是HTTPS连接,且请求URI不以/mob结尾时执行重定向 RewriteCond %{HTTPS} !=on RewriteCond %{REQUEST_URI} !/mob$ RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]
规则解释
RewriteCond %{HTTPS} !=on:判断当前请求是HTTP(非HTTPS),这个条件没问题,保留即可。RewriteCond %{REQUEST_URI} !/mob$:核心修正点——!表示“不匹配”,/mob$表示请求URI的结尾是/mob,不管前面有没有路径,都能准确排除所有带/mob后缀的URL。RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]:把匹配到的所有HTTP请求重定向到对应的HTTPS地址,[L]表示这是最后一条执行的规则,R=301表示永久重定向(对SEO友好)。
测试场景验证
- ✅ 当访问
http://example.com、http://example.com/any/page这类不带/mob的URL时,会自动跳转到https://开头的对应地址。 - ❌ 当访问
http://example.com/mob、http://example.com/any/path/mob这类带/mob后缀的URL时,会保持HTTP连接,不会触发重定向。
内容的提问来源于stack exchange,提问作者Tolgay Toklar
相关产品推荐
相关产品推荐

