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

У меня есть переписывание в nginx или Apache для этого адреса:

http://domain.com/hello

до script как

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;
  }
}

Ответы

Ответ 1

В 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']

Ответ 2

Это действительно зависит от настройки 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.

Ответ 3

Обычно вы можете найти запрошенный URL-адрес в

  • $_SERVER['REQUEST_URI']
  • $_SERVER['REDIRECT_URL'] (возможно, только Apache, не знаю о nginx)

Я знаю, что вы упомянули $_SERVER['REQUEST_URI'] содержит ваш переписанный URL-адрес, но во всех моих тестах он содержит исходный запрос.

Почему бы вам не сбросить $_SERVER и посмотреть, что там.