Apache重写 - 在PHP中获取原始URL

2022-08-30 23:27:30

我用nginx或Apache重写了这个地址:

http://domain.com/hello

到像这样的脚本

http://domain.com/test.php&ref=hell

如何在PHP中访问这个重写的URL?因为,如果我使用当然,我会得到:$_SERVER['REQUEST_URI']

/test.php&ref=hell

但我只想要:

/hello

这可能吗?感恩节寻求帮助。

Upd 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

这实际上取决于PHP设置。使用mod_php您通常仍然在 中具有原始请求路径。对于CGI或FastCGI设置,它很常见。您必须检查页面才能确定。REQUEST_URIREDIRECT_URLphpinfo()

如果你真的找不到任何有帮助的东西,那么是时候作弊了!您可以像这样调整重写规则,以将原始URL保留在您选择的环境变量中:

RewriteRule ^(\w+)$   test.php?ref=$1    [E=ORIG_URI:/$1]

然后,这将以 的形式提供,或者您可以从带有 $_GET['ref'] 的 URI 中获取它。但是你必须在所有潜在的重写规则上使用这个技巧。$_SERVER["ORIG_URI"]


答案 2

您通常可以在

  • $_SERVER['REQUEST_URI']
  • $_SERVER['REDIRECT_URL'](也许只有Apache,不知道nginx)

我知道你提到的包含你重写的URL,但在我所有的测试中,它包含原始请求。$_SERVER['REQUEST_URI']

你为什么不转储,看看里面有什么。$_SERVER


推荐