[英]Apache rewrite - get original URL in PHP
我在nginx或Apache中重寫了這個地址:
http://domain.com/hello
像一個腳本
http://domain.com/test.php&ref=hell
如何在PHP中訪問此重寫的URL? 因為,如果我使用$_SERVER['REQUEST_URI']
當然我得到:
/test.php&ref=hell
但我只想要:
/hello
這可能嗎? Thanx尋求幫助。
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;
}
}
這真的取決於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上使用這個技巧。
您通常可以在中找到請求的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'];
UPD
由於某種原因,nginx不喜歡標題名稱中的符號'_',不知道它之前是如何工作的,也許在nginx更新后發生了變化。 現在我正在使用
proxy_set_header rewriteduri $request_uri;
在PHP中
$_SERVER['HTTP_REWRITEDURI']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.