船说 CMS 网站 404 页面怎么设置
学完这篇,你能让船说CMS站点在访问不存在的页面时,正确返回 404 状态码并显示一个自己设计的 404 页面,而不是跳回首页或者暴露出错信息。
第一步:先搞清楚 404 由谁负责
404 是服务器给出的 HTTP 状态码,CMS 只负责这个页面的内容长什么样。很多人只在后台做了"找不到就跳首页",结果状态码是 200 或 302,搜索引擎会认为首页有大量重复内容,这是典型的"软 404"。
所以正确做法是两件事分开做:服务器负责返回 404 状态码,船说CMS 负责提供一个好看的 404 页面。
注意:不要用
<meta http-equiv="refresh">或 JS 跳转来做 404,那样状态码不会是 404。
第二步:做一个 404 页面文件
在网站根目录(宝塔面板默认是 /www/wwwroot/你的域名/)新建一个 404.html,这是所有方案都要用到的文件。
最简单的可用版本:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>页面不存在 - 船说CMS</title>
<link rel="stylesheet" href="/static/css/style.css">
</head>
<body>
<h1>404</h1>
<p>你要找的页面不存在或已被删除。</p>
<p><a href="/">返回首页</a></p>
</body>
</html>
注意:页面里的 CSS、图片路径要写成
/static/...这种以斜杠开头的绝对路径。用相对路径的话,在/a/b/c这种深链接下会全部加载失败。
第三步:让 Nginx 接管 404
如果你用的是宝塔面板:登录面板 → 左侧「网站」→ 找到你的站点 → 点「设置」→ 弹窗里选「配置文件」,在 server { } 花括号内加入一行:
error_page 404 /404.html;
保存后点「重载配置」或重启 Nginx。
服务器根目录要能访问到这个文件,通常站点配置里已经有 root /www/wwwroot/你的域名;,把 404.html 放在这个目录下即可。
如果你用的是 Apache,就在站点根目录的 .htaccess 里加:
ErrorDocument 404 /404.html
第四步:让船说CMS 的不存在内容也走 404
访问 /article/9999.html 这种不存在的文章时,请求会先进入船说CMS 的路由。船说CMS 基于 ThinkPHP 内核,需要两步:
- 后台伪静态设置:登录后台(默认入口
/admin.php),在左侧菜单找「系统设置」→「伪静态设置」(部分版本叫「URL 规则」),选择与你的 Nginx 规则匹配的那一套,保存。 - 模板目录放一份 404:把第二步做的
404.html复制一份到/template/你正在用的模板目录/404.html,部分版本会优先调用模板目录下的 404 文件。
如果内容不存在时仍然显示白屏或报错页,检查 runtime 目录里有没有报错日志,通常是伪静态规则和实际规则不匹配导致的。
第五步:验证状态码是否正确
打开终端执行:
curl -I https://你的域名/一个不存在的页面.html
返回结果里必须看到 HTTP/1.1 404 Not Found。如果显示 200 或 302,说明请求被伪静态规则或 CMS 路由接管并跳转了,要回到第三步和第四步排查。
注意:如果站点接了 CDN,刚才访问过的错误地址可能已被缓存。改完后要到 CDN 控制台做一次缓存刷新,否则本地测出来永远是老结果。
小结
- 404 = 服务器返回 404 状态码 + CMS 提供页面内容,两件事分开做。
- 页面文件放网站根目录
404.html,内部资源一律用/开头的绝对路径。 - Nginx 加
error_page 404 /404.html;,Apache 加ErrorDocument 404 /404.html。 - 船说CMS 后台要配置伪静态,再把 404 文件复制到当前模板目录。
- 用
curl -I确认状态码真的是 404,别用跳首页冒充。 - 接了 CDN 的站点,改完记得刷新缓存。
原文链接:https://www.gj0.com/thread-385.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。