Пишу сайт на чистом php, столкнулся с роутингом. Проблема в следующем: .htaccess перенаправляет не все запросы в index.php. К примеру, запросы типа site.com, site.com/about, site.com/offers он обрабатывает корректно, но если ввести в url строку подпапку + существующий файл, то запрос не будет перенаправлен в index.php и файл откроется.
Т.е. запрос site.com/components/test.php - не будет обработан и страница будет показана юзеру. При этом, если ввести несуществующий запрос c той же подпапкой, то запрос обработается корректно: site.com/components/test_1.php - перенаправит на страницу 404.
С одной стороны, меня такое поведение устраивает, потому что у меня проходят все ajax запросы без дополнительной обработки маршрутов. Но, с другой стороны, я думаю, что это плохо с точки зрения безопасности. Подскажите, как сделать правильно или в какую сторону копать. На ларавель планирую пересесть, как только закончу свой проект на чистом php :)
.htaccess
AddDefaultCharset UTF-8
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /index.php [QSA,L]
index.php
//url
$request_url = rtrim(ltrim(urldecode(parse_url($_SERVER['REQUEST_URI'],5)), '/'), '/');
$params = array_filter(explode("/", $request_url));
//если в url передано 2 параметра
if (count($params) == 2) {
$dynamic_routes = [
'offers' => 'pages/offer.php',
];
if (isset($dynamic_routes[$params[0]])) {
$get = $params[1];
require_once $dynamic_routes[$params[0]];
}
else require_once ('pages/404.php');
}
//если в url передано меньше двух параметров
elseif (count($params) < 2) {
$routes = [
'' => 'pages/main.php',
'offers' => 'pages/offers.php',
'about' => 'pages/about.php',
'guarantees' => 'pages/guarantees.php',
];
if (isset($routes[$request_url])) require_once $routes[$request_url];
else require_once ('pages/404.php');
}
else require_once ('pages/404.php');