apache — 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'], поэтому он не может увидеть переписанную форму запроса. Является ли то, что я пытаюсь достичь, возможно? (Возможно с другим роутером?)

0

Решение

FWIW, мне пришлось использовать универсальный маршрут в php и перехватывать там эти запросы как «особый случай».

По какой-то причине я ожидал увидеть переписанный URL в одном из полей $ _SERVER, но он там недоступен.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]