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

使用.htaccess将.php结尾URL定向到自定义404页面导致页面失效

问题分析与解决

问题根源

添加的RewriteRule .php$ - [R=404,L]规则会匹配所有以.php结尾的URL,包括你正常存在的index.php,所以访问它时直接被强制返回404。

更关键的是,你的自定义404页面/exception/404.php本身也是.php结尾,当服务器触发404后尝试调用这个页面时,又被这条规则命中,导致服务器找不到可用的错误处理页面,就出现了那句“在尝试使用ErrorDocument处理请求时,遇到了404 Not Found错误”。

修复方案

你需要让这条规则只作用于不存在的.php文件,或者直接排除自定义错误页面的路径。

方案1:仅针对不存在的.php文件返回404

修改规则,先判断文件是否存在,不存在才触发404:

RewriteEngine On
ErrorDocument 404 /exception/404.php
# 匹配以.php/结尾的URL返回404
RewriteRule .php/$ - [R=404,L]
# 仅当对应的.php文件不存在时,才返回404
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .php$ - [R=404,L]

方案2:排除自定义错误页面路径

如果你的自定义404页面是固定路径,可以直接排除它,避免被规则匹配:

RewriteEngine On
ErrorDocument 404 /exception/404.php
# 匹配以.php/结尾的URL返回404
RewriteRule .php/$ - [R=404,L]
# 排除/exception/路径下的.php文件
RewriteCond %{REQUEST_URI} !^/exception/
# 匹配其他.php结尾的URL返回404
RewriteRule .php$ - [R=404,L]

验证效果

  • 访问speedcubing.top/index.php:正常显示首页(因为文件存在,或路径被排除)
  • 访问speedcubing.top/index.php/:显示自定义404页面
  • 访问不存在的xxx.php:返回自定义404页面,不会出现二次错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:15:49