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

.htaccess下无连字符URL slug访问触发404错误问题求助

故障根因

你的配置中第一条重写规则优先级高于slug处理规则,触发了错误的重定向逻辑:

  • 不带连字符的单字slug(如example)完全匹配第一条规则RewriteRule ^([a-z]+)\/?$ $1.php [NC]的匹配条件,请求会被重写到同名单词的.php文件,若站点根目录没有对应文件就会返回404
  • 带连字符的slug包含-符号,不满足第一条规则的纯字母匹配逻辑,会正常命中后续的slug处理规则,因此访问正常
修复方案

方案1:无需保留「路径直接映射同名PHP文件」功能(推荐)

直接删除第一条纯字母路径的重写规则,同时为所有规则增加[L]标记(匹配成功后终止后续规则校验,提升重写效率),修改后完整配置如下:

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteRule ^([a-zA-Z0-9-]+)\/?$ index.php?url=$1 [NC,L]
RewriteRule ^([a-zA-Z0-9-]+)\/season\/([0-9]+)\/?$ index.php?url=$1&season=$2 [NC,L]
  
</IfModule>

方案2:需要保留「路径映射同名PHP文件」功能

给第一条规则增加文件存在性校验,仅当对应的PHP文件真实存在于站点根目录时才执行重写,避免不存在的路径被错误拦截:

<IfModule mod_rewrite.c>
RewriteEngine on

# 仅当同名PHP文件存在时才执行重定向
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([a-z]+)\/?$ $1.php [NC,L]

RewriteRule ^([a-zA-Z0-9-]+)\/?$ index.php?url=$1 [NC,L]
RewriteRule ^([a-zA-Z0-9-]+)\/season\/([0-9]+)\/?$ index.php?url=$1&season=$2 [NC,L]
  
</IfModule>

修改配置后请清空浏览器缓存再测试,避免浏览器缓存的旧重定向规则影响验证结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:45:03