Я экспериментировал с мод-перезаписью. Я думал, что я хотел, было просто, но я не получаю URI запрошенного файла через REQUEST_URI. Скорее доставленное имя передается.
руководство говорит:
THE_REQUEST
Полный HTTP-запрос
строка, отправленная браузером на сервер
(например, «GET /index.html HTTP / 1.1»).
Это не включает в себя какие-либо дополнительные
Заголовки отправляются браузером. это
значение не было сохранено
(декодированный), в отличие от большинства других переменных
ниже.
REQUEST_URI
Запрошенный ресурс
в строке HTTP-запроса. (В
пример выше, это было бы
«/index.html".)
Однако эти два дают разные имена файлов в моих тестах. У меня есть bootstrap.php, через который я хотел отправить все запросы. Это тестовый файл:
<?php
echo $_GET['requestedURI'];
?>
в файле .htaccess, который у меня есть:
### REWRITE RULES ###
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .+ bootstrap.php?requestedURI=%{REQUEST_URI} [L]
Запрос http://localhost/test.htm
выводит: / bootstrap.php
если я добавлю THE_REQUEST вместо REQUEST_URI в .htaccess, я получу GET /test.htm HTTP / 1.1
Так почему бы не согласиться на THE_REQUEST? Ну, как только строка запроса существует, вещи ломаются. Если я запрашиваю: http://localhost/test.htm?x=1&y=2
, я получаю GET /test.htm?x=1, первый амперсанд разбивает вещи. Я думаю, что должна быть возможность заменить все амперсанды в строке запроса на% 26, чтобы это работало, но мне пока не удалось ...
Так может ли кто-нибудь сказать, почему не удается выполнить REQUEST_URI и как это исправить или как переписать амперсанды в% 26 в строке запроса?
Спасибо.
РЕДАКТИРОВАТЬ: Приведенный выше отчет относится к xampp 1.7.3 на Win 7. Тем временем я попробовал его на рабочей системе Linux, и там REQUEST_URI возвращает то, что должно.