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

网站末尾带斜杠的URL返回404错误的原因及解决求助

解决URL末尾带斜杠404的问题

问题根源

你的现有.htaccess有三个核心问题导致带斜杠的URL报错:

  1. 最后那条自动添加.php后缀的规则会错误匹配带斜杠的请求,比如/about/会被重写成/about/.php,这显然是不存在的文件,直接触发404。
  2. 缺少强制统一URL末尾斜杠的规则,没有先把不带斜杠的请求跳转到带斜杠的版本,反而让带斜杠的请求进入错误的重写逻辑。
  3. 规则顺序不合理,通用的.php重写规则放在了特定的blog路由之前,可能导致路由被覆盖。

修改后的完整.htaccess代码

AcceptPathInfo Off
RewriteEngine On
RewriteBase /

# 拦截双斜杠请求返回404
RewriteCond %{THE_REQUEST} //
RewriteRule ^ - [L,R=404]

# 拦截PHP文件后带额外路径的请求返回404
RewriteRule \.php/.+$ [L,NC,R=404]

# 强制跳转到www前缀的域名
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# 强制为所有非文件、非目录的请求添加末尾斜杠
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*)$ /$1/ [R=301,L]

# blog文章路由(仅匹配带末尾斜杠的请求)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^blog/([A-Za-z0-9-]+)/$ inner.php?slug=$1 [NC,L]

# 为不带斜杠、不带后缀的请求自动添加.php后缀
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^([^\.]+)$ $1.php [NC,L]

关键修改说明

  • 添加强制斜杠规则:先把所有不带斜杠的非文件请求跳转到带斜杠的版本,确保URL格式统一,同时避免后续规则错误匹配。
  • 修正.php重写规则:新增条件%{REQUEST_URI} !/$,排除带斜杠的请求,防止生成xxx/.php这种无效路径。
  • 调整规则顺序:把特定的blog路由放在通用的.php重写之前,确保路由优先匹配。

注意事项

  1. 测试前清空浏览器缓存,因为301重定向是永久缓存的,旧缓存可能导致测试结果不准确。
  2. 确保服务器开启了mod_rewrite模块,如果是Apache服务器,需要确认配置文件中AllowOverride All已开启,否则.htaccess规则不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:43:23