Безопасно ли использовать $_SERVER['REQUEST_URI']?
Я изучил другие ответы и вижу, что $_SERVER['REQUEST_URI']
обычно рекомендуется и является общепринятым решением для получения URI текущей страницы вместе с $_SERVER['HTTP_HOST']
.
Я посмотрел исходный код WordPress, и там это тоже широко используется.
Но я нашел некоторые противоречия по поводу того, что это не работает на IIS. Возможно, это было проблемой только в прошлом? Я даже попытался установить IIS на свой компьютер, чтобы проверить, но не смог его настроить, и это кажется излишним просто для подтверждения этого факта.
Похоже, это единственная переменная SERVER, которая включает нужную мне информацию:
/pane-slug/nggallery/tags/dark-colors/
выделенная часть примера добавляется через NextGEN Gallery 2 и доступна только через $_SERVER['REQUEST_URI']
, больше никак. Ранее это можно было получить через get_query_var, но теперь нет.
Если $_SERVER['REQUEST_URI']
не установлена, попытка сымитировать ее вручную на основе PHP_SELF
и QUERY_STRING
дает неэквивалентные результаты.
Так можно ли безопасно полагаться на то, что $_SERVER['REQUEST_URI']
всегда доступна для использования в WordPress? Я предполагаю, что да, так как ядро WordPress использует ее, но хотел уточнить.
$_SERVER['REQUEST_URI']
в WordPress никогда не будет пустым, так как он заполняется в функции wp_fix_server_vars()
(файл wp-includes/load.php
).
Эта функция вызывается в wp-settings.php
до загрузки любых плагинов. Поэтому вы можете использовать её.
Но всегда экранируйте значение. Оно является глобальным и может быть изменено любым другим кодом, поэтому нельзя доверять его содержимому.
Другой случай — доступ к значению через
filter_input(INPUT_SERVER, 'REQUEST_URI');
Запись значения WordPress не повлияет на результат, так как filter_input()
всегда берёт исходное значение. Хотя это более современный и чистый подход, он может не работать в некоторых случаях. См. также эту ветку на Stack Overflow.

Спасибо большое, отличная информация. Теперь я могу удалить IIS и забыть о нем :) Я массово искал в файлах WP $_SERVER['REQUEST_URI'], но каким-то образом пропустил то, на что вы указали. Конечно, я его экранирую, я ничему не доверяю. Просто нужно было узнать, можно ли его использовать. Еще раз спасибо.
