Реализация по принципу единой точки входа, содержимое адресной строки разбивается $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
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите, почему поле из плагина acf сохраняется дважды? Подозреваю, что срабатывает стандартный хук save_post и хук acf/save_post одновременноНужно...
Подскажите нужно сделать имя файла уникальным с помощью microtime и делая
Нужно к этому коду адаптировать pagination переключение с помощью ajax, вот пример и код: