Apache rewrite – получить исходный URL в PHP

У меня есть переписывание в 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']