问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

thinkphp 访问不存在url怎么设置404

发布网友 发布时间:2022-04-06 02:20

我来回答

3个回答

懂视网 时间:2022-04-06 06:41

下面由thinkphp教程栏目给大家介绍关于ThinkPHP空操作、空控制器处理,希望对需要的朋友有所帮助!

ThinkPHP空操作、空控制器处理

当一个高手浏览你的网站的时候,你网站的报错信息将给黑客提供攻击你网站的信息。比如对于空操作、空控制器,你会暴露给给黑客你网站后台所用的框架,黑客会根据框架本省的漏洞对你网站进行攻击。因此,我们需要对空控制器、空操作进行处理,不给黑客留下任何蛛丝马迹。

1. 空操作处理

首先看一下效果:

对于我在IndexController.class.php这个文件里我并没有hello这个方法,担任如果我试图去访问这个方式时,会报如下信息:

注:空操作的本质:一个对象(控制器)调用本身不存在的方法

企业微信截图_16004816248073.png

对于懂ThinkPHP的开发人员来说,很容易看出此网站后台用的是ThinkPHP框架。那么我们怎么来屏蔽这些问题呢?这就是我们今天要讨论的内容。

解决方式1,在控制器里添加一个__call($method,$argvs)的方法

企业微信截图_16004816534716.png

企业微信截图_16004816704958.png

这样,当你再次访问hello方法是就会默认调用控制器的__call($method,$args)方法。

但是!当我们有很多个控制器的时候,我还要每个控制器都写一个__call($method,$args)方法?显然不合理!因此,我们需要把此方法写到控制器的父类里,只需通过继承的方式即可。我们走进Controller.class.php却能找到__call()方法,因为TP已经帮我们做好了,在他的思想里,是看我们是否在控制器里定义了一个叫做_empty()的方法。如果定义了,则调用这个方法

普通控制器父类的位置:ThinkPHP/Library/Think/Controller.class.php

解决方式2

给空操作的名称制作一个同名的模板出来,系统会自动调用该模板。

2. 空控制器处理

企业微信截图_16004816803453.png

由于没有BeijingController.class.php这个文件,所以报错了!!

经过分析TP框架的源码,我们有如下解决办法

企业微信截图_16004816921830.png

所以,我们需要定义一个空的控制器。当我们访问不存在的控制器的时候,就会按照我们指定的错误给我们报错。

企业微信截图_16004817011799.png

企业微信截图_16004817102275.png

好啦,空操作、空控制器就先说到这里O(∩_∩)O~~

热心网友 时间:2022-04-06 03:49

空控制器的概念是指当系统找不到请求的控制器名称的时候,系统会尝试定位空控制器(EmptyController),利用这个机制我们可以用来定制错误页面和进行URL的优化。

/**
 * 空模块,主要用于显示404页面,请不要删除
 */
class EmptyController extends HomeController {
 // 没有任何方法,直接执行HomeController的_empty方法
 // 请不要删除该控制器
     function _empty() {
          header ( "HTTP/1.0 404 Not Found" ); // 使HTTP返回404状态码
          $this->display ( "Public:404" );
     }
     function index() {
          header ( " HTTP/1.0  404  Not Found" );
          $this->display ( "Public:404" );
     }
}

空操作是指系统在找不到请求的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化。

/* 空操作,用于输出404页面 */
 public function _empty() {
      header ( "HTTP/1.0 404 Not Found" ); // 使HTTP返回404状态码
      $this->display ( "Public:404" );
      exit;
 }

热心网友 时间:2022-04-06 05:07

404 页面代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>很抱歉,您搜索的书搬家啦-言书库!</title>
<style type="text/css">
body {margin: 0px; padding:0px; font-family:"微软雅黑", Arial, "Trebuchet MS", Verdana, Georgia,Baskerville,Palatino,Times; font-size:16px;}
div{margin-left:auto; margin-right:auto;}
a {text-decoration: none; color: #1064A0;}
a:hover {color: #0078D2;}
img { border:none; }
h1,h2,h3,h4 {
/* display:block;*/
margin:0;
font-weight:normal;
font-family: "微软雅黑", Arial, "Trebuchet MS", Helvetica, Verdana ;
}
h1{font-size:44px; color:#0188DE; padding:20px 0px 10px 0px;}
h2{color:#0188DE; font-size:16px; padding:10px 0px 40px 0px;}
#page{width:910px; padding:20px 20px 40px 20px; margin-top:80px;}
.button{width:180px; height:28px; margin-left:0px; margin-top:10px; background:#009CFF; border-bottom:4px solid #0188DE; text-align:center;}
.button a{width:180px; height:28px; display:block; font-size:14px; color:#fff; }
.button a:hover{ background:#5BBFFF;}
</style>
</head>
<body>
<div id="page" style="border-style:dashed;border-color:#e4e4e4;line-height:30px;background:url(sorry.png) no-repeat right;">
<h1>腹有诗书气自华~</h1>
<h2>言书库,完本小说在线阅读网址 </h2>
<meta http-equiv="refresh" content="1.5;url=http://www.yanshuku.com">
<font color="#666666">2秒内,若网页未能自动跳转,请点击下面按钮进行跳转!</font><br /><br />
<div class="button">
<a href="http://www.yanshuku.com" title="进入首页">立即进入首页</a>
</div>
</div>
</body>
</html>

TP配置:
无法加载模板跳向404页面
/thinkphp/library/think/Dispatcher.class.php中176行
// 加载模块的扩展配置文件
load_ext_file(MODULE_PATH);
}else{
header("Location:/404.html");die;
// E(L(‘_MODULE_NOT_EXIST_‘).‘:‘.MODULE_NAME);
}
加上header跳转页面,404.html放在跟下

无法加载控制器跳向404页面
创建一个EmptyController.class.php 代码如下

namespace Home\Controller;
use Think\Controller;
class EmptyController extends Controller
{
public function _empty(){
$this->display(‘Error/404‘);//在Home/view中Error文件夹中
}
}
这样就行
无法加载方法跳向404页面
在/thinkphp/library/think/Controller.class.php在170行加上重跳转404页面
public function __call($method,$args) {
if( 0 === strcasecmp($method,ACTION_NAME.C(‘ACTION_SUFFIX‘))) {
if(method_exists($this,‘_empty‘)) {
// 如果定义了_empty操作 则调用
$this->_empty($method,$args);
}elseif(file_exists_case($this->view->parseTemplate())){
// 检查是否存在默认模版 如果有直接输出模版
$this->display();
}else{
$this->display(‘Error/404‘);
// E(L(‘_ERROR_ACTION_‘).‘:‘.ACTION_NAME);
}
}else{
E(__CLASS__.‘:‘.$method.L(‘_METHOD_NOT_EXIST_‘));
    return;
  }
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在公交车上实施扒窃,会受到怎样的处罚? 交通违法行为识别 公交车扒窃会如何处罚? 郑州鱼缸清洗找哪家公司做得比较好? 郑州有没有专业维修鱼缸,清洗鱼缸的? ...的鱼缸,放在办公室养些鱼水草之类的。郑州哪里有卖这样的鱼缸。_百... 我们公司想要定做个观赏鱼缸,不知道郑州哪家公司最专业? 谁知道郑州生态鱼缸定做哪家做的效果最好? 联想电脑启用无线功能的功能键? 笔记本电脑怎么连接网笔记本电脑怎样连接无线网 thinkphp中控制器不存在的问题该怎么解决? thinkphp emptycontroller怎么执行的 thinkcmf设置空模块和空控制器,空方法默认跳转到404页面,怎么设置 thinkphp如何用空操作和空方法解决404问题? thinkphp3.2空控制器和空方法的写法 php 字符匹配与替换问题 php中空白字符串被当作假值?空白字符串是什么?和空字符串一样? php如何判断一个字符串是否包含另一个字符串 PHP判断某字符串是否存在于字符串中[记住] PHP判断输入字符是否符合限制条件 php 判断一个字符串里是否有某个字符代码怎么写? PHP中空字符串介绍0,null,empty和false之间的关系 PHP字符串判断某个字符是否存在。 php 判断一个字段是否为空,为空的话执行一段sql语句 检测字符串中有没有空字符php 使用 PHP 函数编写程序,判断输入一个变量为全数字,字符串长度不允许超过 18 位,不允许为空? PHP中,有没有什么方法能检测出一个字符串中是否有空格呢? PHP中如何判断字符串为空 PHP去掉右边数字跟其他字符 php删除”.. . .. .操作字符串&&&&&&quot;这个字符串中首尾的字符?,求助 thinkphp跳转的问题 为什么ThinkPHP ThinkPHP中关于静态缓存的定义格式为全局的操作静态规则 ThinkPHP 如何判断模块控制器是否存在 thinkphp我想调出数据库表中内容显示为空,怎么回事? thinkphp 怎么设置404 thinkphp怎么判断post提交是否为空 thinkphp查询结果不为空 thinkphp 判断data是否有空 thinkphp怎么让uploadfile允许空文件上传 thinkphp用$.post发送到后台的数据打印出来是空数组。求解决。。。在线等。。。。。。。。 thinkPHP 查询时参数为空的话就查全部,不做where限制.【帮我看看代码】 电脑下载游戏用什么平台好 电脑游戏下载平台有哪些好的 如何在laravel5.4中使用element-ui的组件 laravel 框架 视图 里面怎么用php函数 在laravel中有必要使用vue吗 centos7.2+nginx1.6+php5.7 laravel框架。loadrunner测试注册接口时。php-fpm占用过高的cpu,内存无影响 laravel 框架 开发系统可以销售吗 laravel 框架适合做大型的系统吗