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

.htaccess配置异常:无法移除PHP后缀及添加尾部斜杠

解决.htaccess无法移除.php后缀及添加尾部斜杠的问题

你的现有配置存在几个关键问题:

  • 重复启用RewriteEngine On(仅需声明一次即可)
  • 规则顺序错误:域名跳转(www转非www、HTTPS强制)应放在最前面,内部重写与外部跳转的逻辑顺序颠倒
  • 缺少从.php后缀URL跳转到无后缀加斜杠地址的规则
  • 存在重复的尾部斜杠强制规则,导致逻辑冲突

修正后的完整.htaccess配置

# 仅启用一次RewriteEngine
RewriteEngine On

# 1. 强制HTTPS并跳转www到非www
# 处理HTTPS关闭且带www的情况
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

# 处理HTTPS关闭但无www的情况
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# 处理HTTPS开启但带www的情况
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

# 2. 外部跳转:移除URL中的.php后缀并添加尾部斜杠
# 匹配带.php的真实请求,跳转到无后缀加斜杠的地址
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+\.php)\ HTTP/
RewriteRule ^(.+)\.php$ /$1/ [R=301,L]

# 3. 内部重写:允许无后缀加斜杠的URL加载对应.php文件
# 一级目录:如 example.com/page/ → page.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^/]+)/$ $1.php [L]

# 二级目录:如 example.com/products/item/ → products/item.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^/]+)/([^/]+)/$ $1/$2.php [L]

# 4. 强制尾部斜杠(仅对无后缀的URL生效)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

# 禁止目录浏览
Options -Indexes

关键逻辑说明

  • 规则顺序优先:域名跳转规则放在最前面,避免后续重写规则被提前拦截
  • 主动跳转处理:通过%{THE_REQUEST}匹配真实用户请求,确保访问带.php的URL时,会自动跳转到无后缀加斜杠的版本(比如mydomain.com/products/myproduct.php会跳转至mydomain.com/products/myproduct/)
  • 安全重写校验:内部重写前先检查对应.php文件是否存在,避免无效请求触发服务器错误
  • 精简重复规则:删除了重复的引擎声明和尾部斜杠规则,统一逻辑避免冲突

内容的提问来源于stack exchange,提问作者Shin Chin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:32:44