1

ユーザーが存在しないURLを入力し、リクエストをエラーコントローラーに転送すると、サイトはうまく機能します。しかし

  • URL サイトでスクリプトを記述すると 403 エラーがスローされる
  • いくつかの ASP コード サイトを記述すると、400 エラーがスローされます

これを防ぎ、カスタム 403 および 404 ページに転送するにはどうすればよいですか? htaccess で先に進めてみましたが、成功しませんでした。

別の問題:

  • アドレス バーに任意の ASCII コードを記述した場合、ウェルカム ページ (コントローラー ->index.php) にブートストラップ フォワードします。

ディレクトリ構造、htaccess、およびブートストラップ コードは以下のとおりです。助けてくれてありがとう。

ディレクトリ構造:

/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;
    }

}
4

0 に答える 0