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

添加.php扩展名的Rewrite规则与HTTPS跳转冲突失效求助

问题原因及解决方案

核心原因

你的规则顺序错误,同时缺少目录排除条件,导致重写逻辑不符合预期:

  1. 规则顺序颠倒:你将内部重写添加.php的规则放在了HTTPS强制跳转之前。当用户通过HTTP访问不带后缀的URL时,会先被内部重写成带.php的地址,再触发HTTPS跳转,最终浏览器地址栏显示的是带.php的HTTPS链接,看起来规则完全没生效。
  2. 未排除真实目录:现有规则只排除了存在的文件,但没排除存在的目录。如果访问的是真实目录(比如/blog/),规则会尝试将其重写成/blog/.php,引发错误的同时干扰正常访问。

修正后的.htaccess配置

RewriteEngine On

# 优先强制HTTPS跳转,确保所有请求先转到HTTPS环境
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^(.*)$ https://mysite/$1 [R=301,L,QSA]

# 内部重写:不带.php的URL映射到对应的.php文件(排除真实文件和目录)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]

# 可选:将带.php的URL自动跳转到不带后缀的版本(避免重复收录)
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\.]+)\.php\ HTTP/
RewriteRule ^([^\.]+)\.php$ /$1 [R=301,L,QSA]

关键修正点说明

  • 调整顺序:先完成HTTPS跳转,再处理内部重写,这样跳转后的URL保持不带.php的形式,符合你的需求。
  • 添加目录排除:新增RewriteCond %{REQUEST_FILENAME} !-d,避免对真实目录执行错误重写。
  • 可选反向跳转:补充的规则会将带.php的URL自动跳转到无后缀版本,既优化URL美观度,也避免搜索引擎收录重复内容。

内容的提问来源于stack exchange,提问作者Rick Crofts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:17:38