@marakhd

Роутинг на PHP?

Всем привет! Столкнулся с проблемой: постоянно выдается ошибка 404
Вот код:

Routing.php
<?php 

class Router {
    private $pages = array();
    
    function addRoute($url, $path){
        $this->pages[$url] = $path;
    }

    function route($url){
        if(isset($this->pages["/".$url])) {     //выяснил что ошибка возникает на этой проверки
            $path = $this->pages["/".$url];
            $file_dir = "app/".$path;
            if ($path == "") {
                require "errors/404.html";
                die();
            }
            if (file_exists($file_dir)) {
                require $file_dir;
            } else {
                require "errors/404.html";
                die();
            }
        } else {
            require "errors/404.html";
            die();
        }
    }

}
?>


index.php
<?php 
require "system/Routing.php";
$url = isset($_GET['url']) ? $_GET['url'] : '';

$router = new Router();

$router->addRoute("/cameras", "apps/cameras/index.php");

$router->route($url);

?>


.htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
</IfModule>

В чем может быть проблема? Заранее спасибо!

P.S.
файл apps/cameras/index.php доступен при запросе в формате :80/apps/cameras/index.php
  • Вопрос задан
  • 1360 просмотров
Пригласить эксперта
Ответы на вопрос 1
delphinpro
@delphinpro Куратор тега PHP
frontend developer
class Router {
    private $pages = array();
    
    function addRoute($url, $path){
-       $this->pages[$url] = $path;
+       $this->pages[trim('/', $url)] = $path;
    }

    function route($url){
+       url = trim('/', $url);
-       if(isset($this->pages["/".$url])) {
+       if(isset($this->pages[$url])) {
-           $path = $this->pages["/".$url];
+           $path = $this->pages[$url];
            $file_dir = "app/".$path;
            if ($path == "") {
                require "errors/404.html";
                die();
            }
            if (file_exists($file_dir)) {
                require $file_dir;
            } else {
                require "errors/404.html";
                die();
            }
        } else {
            require "errors/404.html";
            die();
        }
    }
}

require "system/Routing.php";
-$url = isset($_GET['url']) ? $_GET['url'] : '';
+[$url] = explode('?', $_SERVER['REQUEST_URI']);

$router = new Router();

$router->addRoute("/cameras", "apps/cameras/index.php");

$router->route($url);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы