Нужна помощь с роутингом на PHP.
Не могу справиться с редиректом несуществующих страниц на URL /404.
Также не получается настроить ответ "Not Found 404".
Делаю для своего маленького проекта, поэтому база данных не нужна, в принципе, как и движки.
Буду премного благодарен!
Содержание .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
Содержание index.php
/* Обработка ЧПУ-запросов */
class Router {
private $_route = array(); // Переменная хранит маршруты, и файлы, которые будут открываться при определеном маршруте
public function setRoute($dir, $file) {
$this->_route[trim($dir, '/')] = $file;
}
public function route() {
if (!isset($_SERVER['PATH_INFO'])) { // Если открыта главная страница
include './pages/mainpage.php'; // Открываем файл главной страницы
} elseif (isset($this->_route[trim($_SERVER['PATH_INFO'], '/')])) { // Если маршрут задан
include $this->_route[trim($_SERVER['PATH_INFO'], '/')]; // Открываем файл, для которого установлен маршрут
}
else return false; // Если маршрут не задан
return true;
}
}
$route = new Router;
/***************/
/* URL -> файл */
/***************/
/* Страницы */
//$route->setRoute('page-01', "./pages/page-01.php"); // Страница 01
$route->setRoute('page-02', "./pages/page-02.php"); // Страница 02
$route->setRoute('page-03', "./pages/page-03.php"); // Страница 03
$route->setRoute('page-04', "./pages/page-04.php"); // Страница 04
/* Статьи */
//$route->setRoute('article-1', "./articles/article-001.php"); // Статья №001
//$route->setRoute('article-2', "./articles/article-002.php"); // Статья №002
/* Страница 404 */
$route->setRoute('404', "./pages/404.php"); // 404
if (!$route->route()) { // Если URL не найден
header("HTTP/1.1 404 Not Found");
header("Location: /404");
exit();
}