Не происходит перенаправления согласно правилу в .htaccess
В .htaccess прописано правило:
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ ./index.php?route=$1 [L,QSA]
Загрузка маршрутизатора происходит в index.php по команде:
require_once $base_path . 'modules\router.php';
В модуле router.php по команде:
<?php
$request_path = $_GET['route'];
выдает ошибку:
Warning: Undefined array key "route" in D:\xampp\htdocs\Stb-info\modules\router.php on line 2
т.е. элемента массива с ключом [route] почему-то не получаем. В чем может быть ошибка?
Ответы (2 шт):
Вам стоит попробовать проверять как на несуществующие файлы, так и на пути
А ещё ваш index.php в корне? Тогда точку не надо.
Кроме того, корневой путь 'сайт/' у вас скорей всего существует так как он преобразуется в существующий /index.php, Так что для корня это правило не сработает, надо отдельное
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?route=$1 [L,QSA]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^/$ /index.php?route=/ [R]
LogLevel warn rewrite:trace4
А проверить что получилось из редиректа можно действительно изучив содержимое $_SERVER, как предложили в комментариях. Например просто print_r($_SERVER). Там много интересного.
Кроме того, я добавил в конфиг трассировку rewrite. Теперь в ErrorLog сервера будут сыпаться логи того, как происходят переписывания URI. Если что-то не работает надо смотреть туда, это должно дать некоторое понимание происходящего.
Спасибо огромное всем! С вашей помощью я "докопался" до истины! Оказалось, что мне не нужно было в ссылках указывать реальные файлы (выделение для "Духа сообщества"). Ведь в .htaccess указан фильтр RewriteCond %{REQUEST_FILENAME} !-f, который и говорит "игнорировать для физических файлов". Т.е. для них не работает правило перенаправления! Я, как начинающий, этого сразу не понял. Еще раз спасибо!!!