Не происходит перенаправления согласно правилу в .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 шт):

Автор решения: Solt

Вам стоит попробовать проверять как на несуществующие файлы, так и на пути

А ещё ваш 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. Если что-то не работает надо смотреть туда, это должно дать некоторое понимание происходящего.

→ Ссылка
Автор решения: user23279256

Спасибо огромное всем! С вашей помощью я "докопался" до истины! Оказалось, что мне не нужно было в ссылках указывать реальные файлы (выделение для "Духа сообщества"). Ведь в .htaccess указан фильтр RewriteCond %{REQUEST_FILENAME} !-f, который и говорит "игнорировать для физических файлов". Т.е. для них не работает правило перенаправления! Я, как начинающий, этого сразу не понял. Еще раз спасибо!!!

→ Ссылка