You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.htaccess实现PHP MVC强制HTTPS跳转与路由转发?

解决强制HTTPS跳转+MVC路由的.htaccess配置方案

问题根源

  1. 原有父目录规则缺少跳转标记,仅做内部重写而非外部跳转,浏览器感知不到协议切换
  2. 子目录的MVC路由规则执行优先级高于父目录的HTTPS规则,跳转逻辑被覆盖
  3. Cloudflare的CF-Visitor头匹配格式存在问题,JSON字符串的双引号未做正则转义,导致条件判断失效

最终生效的配置(直接替换MVC程序根目录的.htaccess)

将以下内容覆盖原有子目录的.htaccess,确保先完成HTTPS跳转,再处理内部路由:

RewriteEngine On

# 1. 强制跳转至HTTPS(兼容Cloudflare、反向代理场景)
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https [OR]
RewriteCond %{HTTP:CF-Visitor} !\"scheme\":\"https\"
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# 2. MVC路由规则:转发非文件/目录请求到index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [L]

关键调整说明

  • 规则顺序:HTTPS跳转必须放在路由规则之前,保证先完成协议切换再处理内部请求分发
  • 跳转标记:添加[R=301,L],R=301是永久跳转(利于搜索引擎收录),L表示匹配后停止执行后续规则
  • Cloudflare头修正:将!{"scheme":"https"}调整为!\"scheme\":\"https\",正则中需转义双引号才能正确匹配JSON格式的请求头
  • 统一配置:所有规则放在MVC根目录的.htaccess中,避免父/子目录的规则冲突问题

验证方法

  1. 清除浏览器缓存(避免旧规则缓存干扰)
  2. 访问HTTP协议的站点地址,确认自动跳转至HTTPS
  3. 访问自定义路由(如https://你的域名/home),检查index.php是否能正常获取到url参数

内容的提问来源于stack exchange,提问作者De Heger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:42:11