Маршрутизация страниц с одной точкой входа

Я пытаюсь сделать сайт с единой точкой входа. вот моя маршрутизация в index.php

        $page = 2;
        $command = 3;
        $requestURI = explode("/", $_SERVER['REQUEST_URI']);

        if (!$requestURI[$page]) {include_once ('home.php');}
        else if (file_exists($requestURI[$page].".php")) {include_once ($requestURI[$page].".php");} 
        else {include_once ("404.php");} 

мой .htaccess

Options +FollowSymLinks
IndexIgnore */*
# Turn on the RewriteEngine
RewriteEngine On
#  Rules
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

если я перехожу на domain.com/subfolder/gallery, он работает нормально, галерея.php включена, но если я перехожу на domain.com/subfolder/gallery/subfolder, мои js-файлы перепутаны, они ищут их в domain.com /подпапка/галерея/js/

а не в нужном месте: domain.com/subfolder/js/

я включаю их так:

html

Конечно, все файлы css и img включены неправильно. как я могу это исправить?


person user1930254    schedule 31.01.2013    source источник


Ответы (1)


Используйте абсолютные пути к файлам.

Ваш код также уязвим для локального включения файлов.

person fmrk    schedule 31.01.2013
comment
@user1930254 user1930254 вы можете отфильтровать строки, которые используются в lfi (.., / и т. д.), но это не совсем безопасно. Лучше всего включать только те файлы, которые должны быть включены (либо создайте массив разрешенных имен файлов и проверьте, есть ли в нем запрошенный файл, либо создайте оператор switch для каждого разрешенного файла и включите их туда). - person tim; 01.02.2013
comment
preg_match(/^[a-z]$/, $requestURI[$page]) && file_exists... было бы хорошим началом, но они по-прежнему могли читать файлы, ограниченные этим каталогом. Гугл твой друг - person fmrk; 01.02.2013