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

.htaccess配置多条RewriteRule第二条无效返回404错误是什么原因?

规则失效核心原因

1. 前置条件逻辑错误

你写的RewriteCond %{REQUEST_FILENAME}\.php -f完全不符合当前业务场景:
当用户请求/hospital/xxx时,%{REQUEST_FILENAME}对应的是站点目录下的/hospital/xxx路径,拼接.php后变成/hospital/xxx.php,只有这个真实文件存在时才会触发后续重写。你的业务里不存在这类动态命名的文件,所以条件永远不生效。
之前blog规则能正常运行属于巧合:blog组的第二条重写规则没有前置条件限制,即使前面的条件不满足也能触发重写。

2. RewriteCond作用范围错误

RewriteCond仅对**紧随其后的第一条RewriteRule**生效,你每组规则下的第二条重写规则都没有对应的前置校验逻辑。

3. 规则冗余冲突

同前缀下你写了两条匹配逻辑高度重叠的规则,第一条加了[L]标记,匹配成功后会直接终止后续规则执行,第二条规则本身几乎没有生效机会。

4. 潜在的MultiViews干扰

如果Apache开启了MultiViews内容协商功能,会自动将/hospital/xxx路径解析为hospital.php,直接绕过你的重写规则。


修复后的完整.htaccess代码

RewriteEngine On
# 关闭MultiViews避免内容协商干扰重写
Options -MultiViews

# blog路由规则
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^blog/([^/.]+)$ /details.php?post=$1 [NC,QSA,L]

# hospital路由规则
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^hospital/([^/.]+)$ /hospital-profile.php?v=$1 [NC,QSA,L]

验证注意事项

  • 确认hospital-profile.php文件存放在站点根目录,读取权限正常
  • 确认Apache已开启mod_rewrite模块,且站点配置中AllowOverride参数设置为All,允许.htaccess文件生效
  • 测试时清空浏览器缓存或使用无痕模式,避免历史301永久重定向缓存干扰结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:27:03