You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mabbs/_posts/2021-02-28-discuz.md

36 lines
2.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
layout: post
title: 如何给DiscuzX添加像原生一样的404页面
tags: [PHP, DiscuzX]
---
简单的提高用户体验<!--more-->
# 起因
像现在的新网站,由于使用的引擎越来越先进,网站的路径看起来非常的不错,那些一般开发的时候把它叫做路由。
而过去的网站不一样以前的网站程序大多都是以文件形式存在访问的时候都是服务器程序去读取相对应的文件。像PHP算是有点年头了尤其像我这种不喜欢用框架就喜欢原生PHP的人更是如此。
但是以前也是有让访问的URL变得花里胡哨的办法的一般我们把那个叫做伪静态那个一般是由服务器程序根据规则把对应的路径重写成文件的物理地址。
不过也有不少引擎会把所有情况的路径重写到一个文件中,再由一个文件慢慢处理,其实这个已经算是路由了,像我之前写的[超简单反代](/2021/01/06/proxy.html)就是这样的包括一些博客引擎比如WordPress、Typecho等等还有一些CMS也支持。
然而很遗憾的是DiscuzX作为一款有年代的论坛引擎它不会接收所有的请求到处理程序中去这就导致了一个问题那就是错误的请求不会由DiscuzX处理而是由服务器程序处理。
所以DiscuzX在遇到路径404的问题时就只是白底黑字大大的写着404 Not Found而已很丑一般的处理方法也不过是自己单独整一个404页面显得和网站风格很不匹配。
所以今天我要解决这个问题,让这种有年代的程序也显得稍微现代化一点点。
# 解决方法
其实解决这个问题很简单调用DiscuzX的程序去生成这个页面就行了所以以下就是生成这个页面的代码因为是看着模板变量随便写的可能有多余的代码但反正能用
```php
<?php
define('CURSCRIPT', '404');
require './source/class/class_core.php';
C::app()->init();
$navtitle = "提示信息";
$show_message = "抱歉,您访问的页面不存在";
$alerttype = 'alert_error';
$allowreturn = 1;
$param['msgtype'] = 1;
include template('common/showmessage');
```
把这个文件保存为404.php然后放到网站根目录就行了然后再把服务器配置里的错误页面设置为这个文件像Nginx的话可以在server段里加一句`error_page 404 /404.php;`就OK了。
# 总结
目前来看好像我见到的几乎所有论坛即使不是DiscuzX都没能做到404页面和网站完美融合也许我是第一个写这种东西的人吗😀这样就能很简单的提高特别情况下的网站体验了吧……