一,前言php
一.1)如下代碼是在TP3.0版本以後,URL的默認模式=》PATHINFO的前提下進行的。(通俗點,URL中index.php必須存在且正確)html
代碼和講解以下:服務器
一、空模塊解決:http://localhost:8095/index.php/Home/index/index 輸入http://localhost:8095/index.php/Home23/index/index 會報錯,解決框架
-》》》 1)在公共配置文件添加:post
'MODULE_ALLOW_LIST' => array('Home','Admin'),
'DEFAULT_MODULE' => 'Home',網站
2)空模塊要結合下面的2和3,一塊兒,因此要看完哦。搜索引擎
上面的'DEFAULT_MODULE' 很重要, 由於當你模塊名寫錯的時候,tp的基類已經把錯的模塊名當成了控制器名,就會變成Home/Home23,也時候就是走的空控制器了url
二、空控制器解決:spa
1)在Admin和Home下面的Controller文件夾下分別新增EmptyController.class.php文件,裏面寫一個_empty()方法。 這兩個控制器都要繼承Controller.class.php.設計
代碼:
namespace Home\Controller;
use Think\Controller;
/**
* 空模塊,主要用於顯示404頁面,請不要刪除
*/
class EmptyController extends Controller{
public function _empty(){
$src = '/Static/404/404.jpg';
echo "<img src=".$src.">";
}
}
三、空操做解決:
在Home和Admin模塊下的普通控制器的父級控制器裏面寫一個_empty()方法,目的就是每一個控制器都繼承了該_empty()方法,只要是空操做就跳轉到_empty()方法裏面。
代碼以下:
namespace Home\Controller;
use Think\Controller;
/**
* 父類控制器空操做,主要用於子類繼承
*/
class HomeController extends Controller{
public function _empty(){
$src = '/Static/404/404.jpg';
echo "<img src=".$src.">";
}
}
至此,在URL模式爲PATHINFO模式下=》全部TP框架空操做都被咱們自定義的404.jpg頁面替換。
2、通用狀況
通常網站報404緣由都是找不到資源,是服務器(以Apache爲例)報錯,Apache自定義了404輸出,咱們的目的是使用自定義的404.html去替換Apache的輸出,
那麼就有了下面的代碼和過程:
針對Apache服務器:製做一個404頁面,頁面本身設計便可,命名爲notfound.php,上傳到網站根目錄。打開.htaccess文件,添加代碼:ErrorDocument 404 /notfound.php,而後將.htaccess文件上傳到網站根目錄。若是.htaccess存在ErrorDocument 404 /index.php,必定要將其刪除。這種將404錯誤轉向到網站主頁的做法存在極大的風險,嚴重時會致使主頁在搜索引擎中消失。END
示例:
1
2
3
4
5
6
7
8
9
|
<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>
|