PHP获取当前页面的完整URL

注意:URL使用rewrite规则的时候,$_SERVER[‘PHP_SELF’]和$_SERVER[“REQUEST_URL”]可能不会返回你想要的东西。

$_SERVER[“REQUEST_URI”] 只有 apache 才支持,想要一个获取 $_SERVER[‘REQUEST_URI’] 值的通用解决方案,可以使用以下方案:

<?php
// 说明:获取 _SERVER['REQUEST_URI'] 值的通用解决方案
function request_uri() {
	if (isset ( $_SERVER ['REQUEST_URI'] )) {
		$uri = $_SERVER ['REQUEST_URI'];
	} else {
		if (isset ( $_SERVER ['argv'] )) {
			$uri = $_SERVER ['PHP_SELF'] . '?' . $_SERVER ['argv'] [0];
		} else {
			$uri = $_SERVER ['PHP_SELF'] . '?' . $_SERVER ['QUERY_STRING'];
		}
	}
	return $uri;
}
?>

关于$_SERVER的相关参数介绍:

<?php
/*
 * Window - Preferences - Zend Studio- PHP - Code Templates PHP 服务器变量:$_SERVER
 * **************************************************************
 */
echo 
$_SERVER ['PHP_SELF'] . '<BR/>' . // 前正在执行脚本的文件名,与 document root相关。
$_SERVER ['argv'] . '<BR/>' . // 递给该脚本的参数。
$_SERVER ['argc'] . '<BR/>' . // 含传递给程序的命令行参数的个数(如果运行在命令行模式)。
$_SERVER ['GATEWAY_INTERFACE'] . '<BR/>' . // 务器使用的 CGI 规范的版本。例如,“CGI/1.1”。
$_SERVER ['SERVER_NAME'] . '<br/>' . // 前运行脚本所在服务器主机的名称。
$_SERVER ['SERVER_SOFTWARE'] . '<BR/>' . // 务器标识的字串,在响应请求时的头部中给出。
$_SERVER ['SERVER_PROTOCOL'] . '<BR/>' . // 求页面时通信协议的名称和版本。例如,“HTTP/1.0”。
$_SERVER ['REQUEST_METHOD'] . '<BR/>' . // 问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。
$_SERVER ['QUERY_STRING'] . '<BR/>' . // 询(query)的字符串。
$_SERVER ['DOCUMENT_ROOT'] . '<BR/>' . // 前运行脚本所在的文档根目录。在服务器配置文件中定义。
$_SERVER ['HTTP_ACCEPT'] . '<BR/>' . // 前请求的 Accept: 头部的内容。
$_SERVER ['HTTP_ACCEPT_CHARSET'] . '<BR/>' . // 前请求的 Accept-Charset:
$_SERVER ['HTTP_ACCEPT_ENCODING'] . '<BR/>' . // 前请求的 Accept-Encoding:
$_SERVER ['HTTP_ACCEPT_LANGUAGE'] . '<BR/>' . // 前请求的 Accept-Language:
$_SERVER ['HTTP_CONNECTION'] . '<BR/>' . // 前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
$_SERVER ['HTTP_HOST'] . '<BR/>' . // 前请求的 Host: 头部的内容。
$_SERVER ['HTTP_REFERER'] . '<BR/>' . // 接到当前页面的前一页面的 URL 地址。
$_SERVER ['HTTP_USER_AGENT'] . '<BR/>' . // 前请求的 User_Agent: 头部的内容。
$_SERVER ['REMOTE_ADDR'] . '<BR/>' . // 在浏览当前页面用户的 IP 地址。
$_SERVER ['REMOTE_HOST'] . '<BR/>' . // 在浏览当前页面用户的主机名。
$_SERVER ['REMOTE_PORT'] . '<BR/>' . // 户连接到服务器时所使用的端口。
$_SERVER ['SCRIPT_FILENAME'] . '<BR/>' . // 前执行脚本的绝对路径名。
$_SERVER ['SERVER_ADMIN'] . '<BR/>' . // 理员信息
$_SERVER ['SERVER_PORT'] . '<BR/>' . // 务器所使用的端口
$_SERVER ['SERVER_SIGNATURE'] . '<BR/>' . // 含服务器版本和虚拟主机名的字符串。
$_SERVER ['PATH_TRANSLATED'] . '<BR/>' . // 前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER ['SCRIPT_NAME'] . '<BR/>' . // 含当前脚本的路径。这在页面需要指向自己时非常有用。
$_SERVER ['REQUEST_URI'] . '<BR/>' . // 问此页面所需的 URI。例如,“/index.html”。
$_SERVER ['PHP_AUTH_USER'] . '<BR/>' . // PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
$_SERVER ['PHP_AUTH_PW'] . '<BR/>' . 
// PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
$_SERVER ['AUTH_TYPE'] . '<BR/>'
 #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。
;
?>