Pull to refresh

Определение адреса страницы после RewriteRule с использованием mod_proxy

Reading time 2 min
Views 925
Столкнулся с проблемой, которую коллегиально решали почти сутки.

Вкратце: есть сайт, все страницы/шаблоны которого обрабатываются и отдаются через единый index.php, и к тому же для организации ЧПУ (friendly urls) использован htaccess с весьма немалым списком различных правил RewriteRule.

И всё бы хорошо, но вот понадобилось для решения одной задачи знать, а какой же адрес запрашивает клиент. То есть фактически php скрипт знать-не-знает что ввел пользователь в адресной строке, так как запрос он получает уже он htaccessа который и вызывает нужны скрипт.


В итоге получилось, что реальный урл страницы можно было взять только на стороне клиента через javascript.
Распечатывание всяческих суперглобальных массивов типа $_SERVER показало, что реальный адрес ни в одной из переменных не содержится.

Стало понятно, что ответ очевидно надо искать только в файле htaccess.
Первым вариантом было попытаться использовать возможность установки и передачи скриптам переменных окружения, поэтому в самое начало htaccess был вписан примерно такой код:

SetEnvIf Request_URI "(.*)" my=$1
SetEnvIf REDIRECT_my (.+) my=$1
PassEnv my


Действительно переменная $my начинает быть видна в массиве $_SERVER, однако значение все же было таким же, как после обработки дальнейшими правилами htaccess.
Предполагаю, что это сработает в каких-то случаях, однако в нашем случае видимо был многократный проход файла htaccess (для кое-каких задач у нас используется еще mod_proxy).

Тогда пришла идея передавать при каждом рерайте урл с которого происходит рерайт, например

RewriteRule ^photo/([0-9]+).html$ /rubricator/photo.html?%{QUERY_STRING}&id=$1&url=$0 [P,L]


В итоге в любом скрипте нам становится доступна переменная $_SERVER[«url»], в которой и содержится искомый довесок урла (за исключение понятное дела самого домена).

Длительный поиск в Сети решения не дал, поэтому решил поделиться опытом с сообществом
Tags:
Hubs:
-1
Comments 15
Comments Comments 15

Articles