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, но там его нет.

Другие вопросы по тегам