Столкнулся с проблемой, которую коллегиально решали почти сутки.
Вкратце: есть сайт, все страницы/шаблоны которого обрабатываются и отдаются через единый 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»], в которой и содержится искомый довесок урла (за исключение понятное дела самого домена).
Длительный поиск в Сети решения не дал, поэтому решил поделиться опытом с сообществом
Вкратце: есть сайт, все страницы/шаблоны которого обрабатываются и отдаются через единый 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»], в которой и содержится искомый довесок урла (за исключение понятное дела самого домена).
Длительный поиск в Сети решения не дал, поэтому решил поделиться опытом с сообществом