URI, переписанный в htaccess, не передается в php router
Редактировать: чтобы задать тот же вопрос в более общем виде: как я могу переписать URL в htaccess, чтобы переписанная форма была видна в php $_SERVER['REQUEST_URI']
?
Если пользователь запрашивает (существующий) файл epub или mobi через URL-адрес, я хочу перехватить и перенаправить запрос, чтобы маршрутизатор Flight php обрабатывал его по одному из своих маршрутов. (Чтобы вести подсчет загрузок.) Итак, запрос на
http://example.com/book.epub
следует переписать на
http://example.com/download/epub
и это затем должно быть передано на маршрутизатор, как если бы это был исходный запрос. Вот что не работает:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# not using [L] flag, so that the modified request gets handled later
# for book.epub this rule should produce /download/epub etc.
RewriteRule ^book\.(epub|mobi)$ /download/$1 [QSA]
# Flight rewrite rules
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
Проблема № 1 заключается в том, что тест для существующего REQUEST_FILENAME по-прежнему успешно выполняется (он проверяет исходный запрос, а не переписанную форму). Но тест должен остаться, конечно, чтобы запросы на изображения, CSS и другие обычные "ресурсы" не пересылались на маршрутизатор.
Тем не менее, существует также проблема №2: даже если запрошенный файл не существует физически, Flight по-прежнему не видит переписанный URL. Внутренне это смотрит на $_SERVER['REQUEST_URI']
, поэтому он не может видеть переписанную форму запроса. Является ли то, что я пытаюсь достичь, возможно? (Возможно с другим роутером?)
1 ответ
FWIW, мне пришлось использовать универсальный маршрут в php и перехватывать там эти запросы как "особый случай".
По какой-то причине я ожидал увидеть переписанный URL в одном из полей $_SERVER, но там его нет.