首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 獲取當前 URL 完整指南:域名、路徑、參數、端口、Referer 一網打盡

     編輯:PHP 綜合知識

前言

通過 $_SERVER 超全局變量可獲取當前請求的完整 URL 信息。本文匯總最常用的組合方式,可直接複製到項目工具類中。

核心變量速查

變量含義示例
HTTP_HOST域名(含端口若非標準)example.com:8080
SERVER_NAME服務器配置域名example.com
PHP_SELF腳本路徑(相對文檔根)/index.php
REQUEST_URI完整請求 URI(含查詢串)/index.php?id=1&a=2
QUERY_STRING查詢字符串id=1&a=2
HTTP_REFERER來源頁面(不可靠,可偽造)https://google.com/
SERVER_PORT服務器端口80 / 443 / 8080
HTTPS是否 HTTPSon / off

常用組合代碼

// 1. 域名
$host = $_SERVER['HTTP_HOST'];

// 2. 當前腳本路徑
$script = $_SERVER['PHP_SELF'];

// 3. 完整 URL(無端口,自動適配 HTTP/HTTPS)
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$fullUrl = $scheme . '://' . $host . $_SERVER['REQUEST_URI'];

// 4. 帶端口完整 URL
$fullUrlWithPort = $scheme . '://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'];

// 5. 僅路徑(不含查詢串)
$pathOnly = $scheme . '://' . $host . $_SERVER['PHP_SELF'];

// 6. 獲取目錄路徑
$dir = dirname($fullUrl);

直接可用的工具函數

function getCurrentUrl(bool $withQuery = true, bool $withPort = false): string {
    $scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
    $host = $withPort ? $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] : $_SERVER['HTTP_HOST'];
    $uri = $withQuery ? $_SERVER['REQUEST_URI'] : $_SERVER['PHP_SELF'];
    return $scheme . '://' . $host . $uri;
}

// 用法
echo getCurrentUrl();           // 完整 URL
echo getCurrentUrl(false);      // 無查詢串
echo getCurrentUrl(true, true); // 帶端口

注意事項

  1. HTTP_HOST 來自客戶端 Host 頭,可被偽造;安全敏感場景用 SERVER_NAME(需服務器正確配置)。
  2. 2. REQUEST_URI 包含查詢串,PHP_SELF 不包含。 3. 反向代理(Nginx/Cloudflare)下需讀取 HTTP_X_FORWARDED_PROTO、HTTP_X_FORWARDED_FOR 判斷真實協議/IP。 4. HTTP_REFERER 非必發、可篡改,僅作統計參考,不可用於權限控制。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved