ユーザーが存在しない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;
}
}