Magento 2 页面突然 404,第一步是判断 404 由 Web 服务器返回,还是请求已经进入 Magento 后由路由返回。两者页面样式、响应头和日志位置通常不同。
确认影响范围
- 只有一个商品或分类 404:优先检查实体和 URL 重写。
- 所有前台页面 404,但静态文件正常:检查入口文件与 rewrite 规则。
- 只有某个 store view 404:检查 Base URL、store code 和网站绑定。
- 后台正常、前台全站异常:检查部署、维护模式和前端路由。
检查实体状态
商品必须启用、分配到当前网站,并具有适合的可见性。分类需要启用且位于当前网站使用的根分类下。CMS 页面要启用,并分配到当前 store view。
检查 URL 重写
SELECT url_rewrite_id, entity_type, entity_id, request_path,
target_path, redirect_type, store_id
FROM url_rewrite
WHERE request_path = 'example-path.html';
查询时使用不带域名和开头斜线的实际 request path,并匹配当前 store ID。如果没有记录,先检查实体 URL Key 和网站范围,不要手工插入一条未经验证的 target_path。
Web 服务器规则
Nginx 或 Apache 必须把不存在的物理路径交给 Magento 的入口处理。发布新配置后,可先做语法检查再 reload:
nginx -t
# 通过后再由有权限的运维流程 reload
不要直接复制其他项目的 Nginx 配置覆盖当前站点,尤其要保留媒体、静态文件、安全目录和 PHP 入口规则。
检查 Base URL 与 Store
bin/magento config:show web/unsecure/base_url
bin/magento config:show web/secure/base_url
bin/magento config:show web/url/use_store
代理层终止 HTTPS 时,还要确认转发协议头配置正确,否则可能产生错误跳转,看起来像 404。
缓存不是第一原因
路由或 URL 重写修复后,可精准清理配置和 Full Page Cache:
bin/magento cache:clean config full_page
单纯反复 flush 不会创建缺失的 URL 重写,也不能修复错误的 Web 服务器规则。
验证
- 直接访问目标 URL,记录状态码和最终跳转地址。
- 确认同一页面在各 store view 的表现。
- 检查旧 URL 是否按预期 301,新 URL 是否返回 200。
- 抽查首页、分类、商品、CMS、静态文件和媒体文件。
- 再次保存测试实体,确认 URL 重写能自动维护。

