Я столкнулся с проблемой, на коллективное решение которой ушло почти 24 часа.
Вкратце: есть сайт, все страницы/шаблоны которого обрабатываются и обслуживаются через единый index.php, а кроме того, для организации CNC (дружественных URL) используется htaccess с очень немалым списком различных RewriteRules. И всё бы ничего, но для решения одной проблемы нужно было знать, какой адрес запрашивает клиент. То есть по сути PHP-скрипт не знает, что пользователь ввел в адресную строку, так как полученный им запрос уже является htaccess, который вызывает нужный скрипт. В результате оказалось, что реальный URL страницы можно взять только на стороне клиента через javascript. Распечатка всевозможных суперглобальных массивов типа $_SERVER показала, что настоящий адрес не содержится ни в одной из переменных.
Стало понятно, что ответ явно нужно искать только в файле htaccess. Первый вариант был попробовать использовать возможность устанавливать и передавать в скрипты переменные окружения, поэтому в самом начале htaccess было написано что-то вроде этого: SetEnvIf Request_URI "(.
*)" my=$1 SetEnvIf REDIRECT_my (.
+) my=$1 PassEnv мой Действительно, переменная $my начинает быть видна в массиве $_SERVER, но значение остаётся таким же, как и после обработки дальнейшими правилами htaccess. Я предполагаю, что в некоторых случаях это сработает, но в нашем случае видимо был многократный проход по файлу htaccess (для некоторых задач мы также используем mod_proxy).
Потом пришла идея передавать при каждом рерайте URL, с которого происходит рерайт, например RewriteRule ^photo/([0-9]+).
html$ /rubricator/photo.html?%{QUERY_STRING}&id=$1 &url=$0 [П, Л] В результате в любом скрипте нам становится доступна переменная $_SERVER[“url”], которая содержит необходимый дополнительный URL (кроме, конечно, самого домена).
Долгий поиск в Интернете не дал решения, поэтому решил поделиться своим опытом с сообществом.
Теги: #Правила перезаписи #определение URL #htaccess #php #Chulan
-
Обзор Смартфона Sciphone N19
19 Oct, 24 -
Информатика И Философия В Оксфорде
19 Oct, 24 -
Обнаружен Критический Эксплойт Firefox 3.5
19 Oct, 24 -
Playstation Приглашает Вас В Игромир
19 Oct, 24 -
Gamlist — Ваш Список Игр
19 Oct, 24