关于删除或不存在的帖子返回 404
看网上很多文章介绍的方法,实际上都是返回 200,怎么才能返回404呢,看了下dismall.com 就能返回 404帖子删除,返回404的解决方法:文件位置:source\module\forum\forum_viewthread.php,第26行:
if(!$_G['forum_thread'] || !$_G['forum']) { showmessage('thread_nonexistence');}修改为:
if(!$_G['forum_thread'] || !$_G['forum']) { header('HTTP/1.1 404 Not Found'); header('status: 404 Not Found'); include("404/index.html"); exit();}
如图,返回的 200,不是 404
要实现删除或不存在的帖子返回 404 状态码,你可以在 `forum_viewthread.php` 文件中进行修改。你提到的代码片段已经接近正确,但需要做一些调整以确保逻辑正确并且返回 404 状态码。
以下是具体的修改步骤:
1. **找到 `forum_viewthread.php` 文件**:
文件路径为 `source/module/forum/forum_viewthread.php`。
2. **修改代码**:
在 `forum_viewthread.php` 文件中,找到判断帖子是否存在的代码段。通常,Discuz! 会通过 `$_G['forum_thread']` 来判断帖子是否存在。如果帖子不存在或已被删除,你可以直接返回 404 状态码。
修改后的代码如下:
if (!$_G['forum_thread']) {
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');
include template('common/header');
include template('common/404');
include template('common/footer');
exit();
}
解释:
- `header('HTTP/1.1 404 Not Found');` 和 `header('Status: 404 Not Found');` 用于设置 HTTP 状态码为 404。
- `include template('common/header');` 和 `include template('common/footer');` 用于加载页面的头部和尾部模板。
- `include template('common/404');` 用于加载自定义的 404 页面模板。
3. **创建自定义 404 页面**:
你可以在 `template/default/common/` 目录下创建一个名为 `404.htm` 的文件,用于显示自定义的 404 页面内容。例如:
<div class="wrap">
<div class="error-page">
<h1>404</h1>
<p>抱歉,您访问的帖子不存在或已被删除。</p>
<p><a href="{$_G['siteurl']}">返回首页</a></p>
</div>
</div>
4. **测试**:
修改完成后,保存文件并上传到服务器。然后尝试访问一个不存在的帖子,检查是否返回了 404 状态码,并且显示了你自定义的 404 页面。
### 注意事项:
- 如果你使用的是自定义模板,请确保在 `template/你的模板目录/common/` 下也创建了相应的 `404.htm` 文件。
- 如果你希望 404 页面更加个性化,可以在 `404.htm` 中添加更多的 HTML 和 CSS 样式。
通过以上步骤,你可以确保当用户访问一个不存在的帖子时,服务器会返回 404 状态码,并且显示自定义的 404 页面。这样可以提升用户体验,并且有助于 SEO 优化。
如果你有其他问题或需要进一步的帮助,请随时提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]