簡體   English   中英

Apache重寫 - 在PHP中獲取原始URL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM