Реализация по принципу единой точки входа, содержимое адресной строки разбивается $routes = explode('/', $_SERVER['REQUEST_URI']) и результаты передаются в обработчики.
Адресная строка имеет следующий вид: example.com/11/20, где 11 - id пользователя, а 20 - id категории.
Записи в .htaccess:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
Возникла проблема с добавлением слеша в конец строки. Например, корректно работают адреса вида
example.com/11
example.com/11/
example.com/11/20
но начинаются проблемы, когда я пытаюсь добавить слеш (и дополнительную переменную) в конец строки:
example.com/11/20/
example.com/11/20/page3
В этом случае index-страница "теряет" стили css, библиотеки js и отображаемые изображения.
Кто-то может объяснить, почему добавление слеша ломает страницу, а главное, почему это происходит на определенном уровне вложенности (например, добавить слеш так - example.com/11/ - еще можно, а так - example.com/11/20/ - уже нельзя)? Это как-то можно исправить?
UPD.
Обработка всех routes происходит одинаково, т.е. во всех случаях подгружается index.php и переменной присваивается получаемое в результате разбора строки значение:
if(!empty($routes[1])) { //если это не главная страница всего сервиса
if(intval($routes[1])) { //если это страница пользователя, а не, например, поиск
$user_id = intval($routes[1]) ;
if (empty($routes[2])) { //если запрос главной страницы или категории (не контакты, не поиск ...)
require "html/index.php";
//some code
require "html/index.php";
$page = $routes[3];
Проблема частично решена тем, что в подгружаемом index.php в строках вида href="../css/style.css" убрал переход на уровень вверх, т.е. заменил на href="/css/style.css" (без точек впереди). Написал "частично решена", потому что теперь код работать-то работает и со слешем и без одинаково, но я не понимаю причин такого поведения и такой избирательности (за код прошу не пинать).
Если проблема только в статике, то необходимо указывать полный путь, так как все запросы идут к ./index.php, а для браузера путь будет всегда вроде этого example.com/11/20/page3/css/style.css
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости