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

在.htaccess中定义根目录解决RewriteRule伪静态URL 404问题

解决伪静态URL跨页面访问的404问题

嘿,我完全懂你遇到的麻烦——用RewriteRule实现伪静态后,从不同页面(比如引入了头部文件的页面)访问时老是弹出404错误,核心原因就是相对路径解析不一致:浏览器会把伪静态URL当成真实的目录结构,导致资源加载或者重定向路径跑偏。下面给你一套针对性的.htaccess解决方案,帮你统一所有页面的URL解析基准:

1. 先设置根目录基准(关键!)

在.htaccess开头添加RewriteBase指令,明确网站的根目录路径,让所有重定向规则都基于这个绝对根目录计算,彻底避免相对路径混乱:

# 开启重写引擎
RewriteEngine On

# 设置网站根目录:如果你的网站部署在域名根目录,就写/;如果在子目录(比如/blog),就写/blog/
RewriteBase /

要是不确定根目录,先试试/,绝大多数域名根目录部署的网站用这个就没问题。

2. 修正伪静态重写规则

确保你的RewriteRule是基于根目录的绝对路径匹配,同时一定要跳过真实存在的文件和目录(不然CSS、JS、图片这些静态资源会被错误重写,也会导致404):

# 跳过真实存在的文件(比如css、js、图片)和目录,避免被重写
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# 这里替换成你的实际伪静态规则,示例:把/article/xxx重定向到article.php?id=xxx
RewriteRule ^article/([0-9a-zA-Z]+)$ article.php?id=$1 [L,QSA]

给你解释下关键参数:

  • [L]:表示这是最后一条规则,匹配成功后就不再执行后续规则,避免冲突
  • [QSA]:保留原URL的查询参数,比如用户访问/article/123?utm=abc,会自动传递给article.php?id=123&utm=abc

3. 同步修复页面内的资源路径

除了.htaccess的设置,还要确保页面里引入的头部、CSS、JS等资源用绝对路径(比如/css/style.css,而不是css/style.css)。这样不管伪静态URL是什么结构,浏览器都会从根目录加载资源,不会出现路径错误。

额外排查小技巧

如果还是出现404,可以检查这几点:

  • 确认Apache服务器已经开启了mod_rewrite模块(可以问主机服务商或者自己查看phpinfo信息)
  • 检查你的DirectoryIndex设置(比如你写的DirectoryIndex index2.php),确保这个文件确实存在于根目录
  • 先测试一个简单的重写规则(比如把test重定向到index2.php),验证RewriteBase是否生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:33:35