主页有文章,点进去404的解决方案

伪静态没有配置好(见过这个名词很多遍,第一次知道他是做什么的)

AI:

【推理前提】

  1. 主页请求的特征:当你访问域名 gzz.moe 时,浏览器向 Nginx 发送的请求路径是根目录 /

  2. Nginx 的默认行为:Nginx 配置里通常有一行默认指令(叫 index),它的作用是:如果有人访问一个目录(比如 /),就自动去这个目录下找 index.phpindex.html 等默认文件。

  3. 主页内容的来源:你看到的“文章预览”,其实是 WordPress 的主入口 index.php 运行后,去数据库(MySQL)里把最新文章的标题、摘要、链接等文本信息打包提取出来,直接渲染在同一个页面上的。

【逻辑推导】

  • 第一步:访问主页时发生了什么? 当你打开 gzz.moe,Nginx 收到请求,一看是根目录 /,立刻按照默认规则,把活儿交给了你网站根目录下的 index.php。这个文件是 WordPress 的“总管”。总管一启动,连上数据库,把最新的文章列表(预览图、摘要、链接)拉取出来,展示给你看。这个过程不需要任何伪静态规则,因为 Nginx 直接找到了物理存在的 index.php 文件。

  • 第二步:预览是怎么存在的? 你看到的那些文章预览和链接(比如 <a href="/2026/02/24/learning/又是一期大工程/">),在此时仅仅是一段段被印在主页上的文字代码而已,它们是从数据库里读取出来的文本,并不代表硬盘上真的有这些文件夹。

  • 第三步:点击链接时发生了什么? 当你点击那条文章链接时,浏览器向 Nginx 发起了一个全新的请求,要求访问 /2026/02/24/...

  • 第四步:报错的诞生 此时 Nginx 变成了个“死脑筋的保安”。因为没有伪静态规则(try_files),保安一看你要去 2026 号楼 0224 房间,就在服务器硬盘上死命找。发现没有这个物理文件夹,保安直接把你拦在门外,甩出一个 404 错误。在这个阶段,请求根本没有被交到 WordPress(index.php)手里,直接在 Nginx 这一层就被毙掉了。

【最终结论】 主页能看预览,是因为主页请求直接命中了物理存在的 index.php,WordPress 成功从数据库读取了数据;而点击文章时,发起的是一个带有虚拟路径的新请求,由于 Nginx 缺少伪静态规则,它把虚拟路径当成了物理路径去硬盘里找,导致在到达 WordPress 之前就报了 404 错误。

发表评论