如何设置 404 页面的路由?

How do I setup the routing for a 404 page?

提问人:Yoeri Achterbergen 提问时间:8/4/2019 最后编辑:Giacomo MYoeri Achterbergen 更新时间:8/4/2019 访问量:95

问:

通过互联网上的一些教程,我用php创建了一个简单的路由器。代码工作正常,但如果文件不存在,我尝试路由 404 页面。我的代码在下面

索引文件 (PHP)

include 'router.php';
$request = $_SERVER['REQUEST_URI'];
$router = new router($request);

$router->get('/','app/home');
$router->get('post','app/post');   
$router->get('hello','app/hello'); 

路由器文件 (PHP)

class router
{
    private $request;

    public function __construct($request)
    {
        $this->request = $request;
    }

    public function get($route, $file)
    {
        $uri = trim($this->request, "/");
        $uri = explode("/", $uri);

        if($uri[1] == trim($route, "/")) {
            array_shift($uri);
            $args = $uri;
            if(file_exists($file . '.php')) {
                require_once $file .'.php';
            } else {
                require_once  '404.php';
            }
        }
    }
}       

该代码不显示 404 页面,而仅显示存在的文件。请有人能帮我吗?

PHP OOP 路由

评论


答:

-1赞 konrados 8/4/2019 #1

首先,您的代码似乎容易受到“文件包含”的影响。查看 https://www.owasp.org/index.php/Testing_for_Local_File_Inclusion

其次,它应该工作正常,我的水晶球告诉我,由于某种原因,该文件不可读(它不存在或存在权限问题)。要查看发生了什么 - 启用错误报告,即将此放在您的 php.ini 文件中:404.php

error_reporting = -1
display_errors = On

或者在应用/脚本开头的某个位置添加以下内容:

ini_set('display_errors', 1);
error_reporting(-1);