如何防止403,400错误URL转发?

时间:2013-02-27 11:10:32

标签: php http-status-code-403 http-status-code-400

当用户输入任何不存在的URL并将请求转发给错误控制器时,站点运行良好。 但

  • 如果您在网址中编写脚本,则抛出403错误
  • 如果你写了一些asp代码网站抛出400错误

如何阻止此操作并将其转发到自定义403和404页面?我尝试了htaccess,但我无法成功。

另一个问题:

  • 如果您在地址栏中编写任何ascii代码,请将其引导至欢迎页面(controller - > index.php)。如何可能?

目录结构,htaccess和bootstrap代码如下。谢谢你的帮助。

目录结构:

/config
/libs
   -bootstrap.php
/controllers
/models
/views
/public_html
  -index.php
   htaccess
htaccess

主目录中的htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule    ^$    public_html/    [L]
RewriteRule    (.*) public_html/$1    [L]
</IfModule>

public_html目录中的htaccess

Options -Indexes

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

public_html中的index.php

<?php

define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(dirname(__FILE__)));
require_once (ROOT . DS . 'libs' . DS . 'bootstrap.php');

$app = new Bootstrap();

libs中的bootstrap.php

<?php

class Bootstrap {

    function __construct() {

        $url = isset($_GET['url']) ? $_GET['url'] : null;
        $url = rtrim($url, '/');
        $url = explode('/', $url);

        print_r($url);

        if (empty($url[0])) {
            require '../controllers/index.php';
            $controller = new Index();
            $controller->index();
            return false;
        }

        $file = '../controllers/' . $url[0] . '.php';
        if (file_exists($file)) {
            require $file;
        } else {
            $this->error();
            return false;
        }

        $controller = new $url[0];

        // calling methods
        if (isset($url[2])) {
            if (method_exists($controller, $url[1])) {
                $controller->{$url[1]}($url[2]);
            } else {
                $this->error();
            }
        } else {
            if (isset($url[1])) {
                if (method_exists($controller, $url[1])) {
                    $controller->{$url[1]}();
                } else {
                    $this->error();
                }
            } else {
                $controller->index();
            }
        }


    }

    function error() {
        require '../controllers/error.php';
        $controller = new Error();
        $controller->index();
        return false;
    }

}

0 个答案:

没有答案