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
и посмотреть, что там.