我在nginx或Apache中重写了这个地址:
http://domain.com/hello
到像
这样的脚本http://domain.com/test.php&ref=hell
如何在PHP中访问此重写的URL?因为,如果我当然使用$_SERVER['REQUEST_URI']
,我会得到:
/test.php&ref=hell
但我只想要:
/hello
这可能吗? Thanx寻求帮助。
更新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;
}
}
答案 0 :(得分:12)
这实际上取决于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"]
使用,或者您可以使用$ _GET ['ref']从URI中获取它。
但是你必须在所有潜在的RewriteRules上使用这个技巧。
答案 1 :(得分:6)
您通常可以在
中找到请求的网址$_SERVER['REQUEST_URI']
$_SERVER['REDIRECT_URL']
(可能只是Apache,不知道nginx)我知道您提到$_SERVER['REQUEST_URI']
包含您的重写网址,但在我的所有测试中,它都包含原始请求。
为什么不转储$_SERVER
并查看其中的内容。
答案 2 :(得分:5)
在Nginx
conf中,我们需要添加request_uri
的用户标题:
proxy_set_header request_uri $request_uri;
并在php
中阅读:
echo $_SERVER['HTTP_REQUEST_URI'];
<强> UPD 强>
由于某种原因,nginx不喜欢标题名称中的符号'_',不知道它之前是如何工作的,也许在nginx更新后发生了变化。现在我正在使用
proxy_set_header rewriteduri $request_uri;
并在php中
$_SERVER['HTTP_REWRITEDURI']