TP3.2框架,实现空模块、空控制器、空操作的页面404替换||同步实现apache报错404页面替换

一,前言

  一.1)以下代码是在TP3.0版本之后,URL的默认模式=》PATHINFO的前提下进行的。(通俗点,URL中index.php必须存在且正确)

代码和讲解如下:

1、空模块解决:http://localhost:8095/index.php/Home/index/index 输入http://localhost:8095/index.php/Home23/index/index  会报错,解决

-》》》 1)在公共配置文件添加:

  'MODULE_ALLOW_LIST'    =>    array('Home','Admin'),
  'DEFAULT_MODULE'       =>    'Home',

2)空模块要结合下面的2和3,一起,所以要看完哦。

上面的'DEFAULT_MODULE'  很重要, 因为当你模块名写错的时候,tp的基类已经把错的模块名当成了控制器名,就会变成Home/Home23,也时候就是走的空控制器了

2、空控制器解决:

1)在Admin和Home下面的Controller文件夹下分别新增EmptyController.class.php文件,里面写一个_empty()方法。 这两个控制器都要继承Controller.class.php.

代码:

namespace HomeController;
use ThinkController;
/**
 * 空模块,主要用于显示404页面,请不要删除
 */
class EmptyController extends Controller{
    public function _empty(){
        $src = '/Static/404/404.jpg';
        echo "<img src=".$src.">";
    }
}

3、空操作解决:

在Home和Admin模块下的普通控制器的父级控制器里面写一个_empty()方法目的就是每个控制器都继承了该_empty()方法,只要是空操作就跳转到_empty()方法里面。

代码如下:

namespace HomeController;
use ThinkController;
/**
 * 父类控制器空操作,主要用于子类继承
 */
class HomeController extends Controller{
    public function _empty(){
        $src = '/Static/404/404.jpg';
        echo "<img src=".$src.">";
    }
}

至此,在URL模式为PATHINFO模式下=》所有TP框架空操作都被我们自定义的404.jpg页面替换。

二、通用情况--修改apache配置.htaccess

  一般网站报404原因都是找不到资源,是服务器(以Apache为例)报错,Apache自定义了404输出,我们的目的是使用自定义的404.html去替换Apache的输出,

那么就有了下面的代码和过程:

针对Apache服务器:制作一个404页面,页面自己设计即可,命名为notfound.php,上传到网站根目录。打开.htaccess文件,添加代码:ErrorDocument 404 /notfound.php(注意:404和/之间有空格),然后将.htaccess文件上传到网站根目录。如果.htaccess存在ErrorDocument 404 /index.php,一定要将其删除。这种将404错误转向到网站主页的作法存在极大的风险,严重时会导致主页在搜索引擎中消失。END

示例:

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

ErrorDocument 404 /notfound.php

</IfModule>

  

原文地址:https://www.cnblogs.com/xuzhengzong/p/6519685.html