У меня есть переписывание в nginx или Apache для этого адреса:
http://domain.com/hello
к сценарию, подобному
http://domain.com/test.php&ref=hell
Как я могу получить доступ к этому переписанному URL-адресу в PHP? Потому что, если я использую $_SERVER['REQUEST_URI']
конечно, я получаю:
/test.php&ref=hell
но я только хочу:
/hello
Это возможно? Спасибо за помощь.
Обновление nginx cnf
proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; server { listen 80; server_name domain.test; location / { rewrite ^/(main|best|air)$ /core/feeds.php?act=$1 last; proxy_pass http://127.0.0.1:8080; } }
Это действительно зависит от настройки PHP. С mod_php у вас всегда есть исходный путь запроса в REQUEST_URI
. Для установок CGI или FastCGI это обычно REDIRECT_URL
. Вам обязательно нужно проверить phpinfo()
.
Если вы действительно не можете найти ничего, что могло бы помочь, тогда пришло время обмануть! Вы можете адаптировать RewriteRule таким образом, чтобы сохранить исходный URL-адрес в переменной окружения:
RewriteRule ^(\w+)$ test.php?ref=$1 [E=ORIG_URI:/$1]
Тогда это будет доступно как $_SERVER["ORIG_URI"]
, или вы можете просто получить его из URI с помощью $ _GET ['ref']. Но вам придется использовать этот трюк во всех возможных RewriteRules.
Обычно вы можете найти запрошенный URL-адрес в
$_SERVER['REQUEST_URI']
$_SERVER['REDIRECT_URL']
(возможно, только Apache, не знаю о nginx) Я знаю, что вы упомянули, что $_SERVER['REQUEST_URI']
содержит ваш переписанный URL-адрес, но во всех моих тестах он содержит исходный запрос.
Почему бы вам не сбросить $_SERVER
и посмотреть, что там.
В Nginx
conf нам нужно добавить заголовок пользователя с request_uri
:
proxy_set_header request_uri $request_uri;
И прочитайте его в php
:
echo $_SERVER['HTTP_REQUEST_URI'];
обн
по какой-то причине nginx не любит символ «_» в заголовке, не знаю, как он работал раньше, возможно, что-то изменилось после обновления nginx. Теперь я использую
proxy_set_header rewriteduri $request_uri;
и в php
$_SERVER['HTTP_REWRITEDURI']