PHP获取请求路径和请求参数

获取域名或主机地址

1
2
echo $_SERVER['HTTP_HOST']."<br>";  // www.appblog.cn
echo 'http://'.$_SERVER['HTTP_HOST'].'/'; // http://www.appblog.cn/

获取网页地址

1
echo $_SERVER['PHP_SELF']."<br>";  // /Home/picture

获取网址参数

1
echo $_SERVER["QUERY_STRING"]."<br>";  // a=1&b=2

获取用户代理

1
echo $_SERVER['HTTP_REFERER']."<br>";  // http://www.appblog.cn/index.php/Home/index

获取完整的url

1
2
3
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."<br>";  // http://www.appblog.cn/index.php/Home/picture?a=1&b=2

echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']."<br>"; // http://www.appblog.cn/Home/picture?a=1&b=2

包含端口号的完整url

1
echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]."<br>";  // http://www.appblog.cn:80/index.php/Home/picture?a=1&b=2

只取路径

1
echo 'http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]."<br>";  // http://www.appblog.cn/index.php/Home/picture?a=1&b=2

$_SERVER["HTTP_HOST"]$_SERVER["SERVER_NAME"]的区别

(1)通常情况

$_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息
$_SERVER["SERVER_NAME"] 默认情况下直接输出Apache的配置文件httpd.conf中的ServerName值(或Nginx配置文件)

(2)当服务器为非80端口时

$_SERVER["HTTP_HOST"] 会输出端口号,例如:appblog.cn:8080
$_SERVER["SERVER_NAME"] 会直接输出ServerName值

因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT

(3)当配置文件httpd.conf中的ServerName与HTTP/1.0请求的域名不一致时

httpd.conf配置如下:

1
2
3
4
<virtualhost *>
ServerName appblog.cn
ServerAlias www.appblog.cn
</virtualhost>

客户端访问域名www.appblog.cn
$_SERVER["HTTP_HOST"] 输出www.appblog.cn
$_SERVER["SERVER_NAME"] 输出appblog.cn

所以,在实际程序中,应尽量使用$_SERVER["HTTP_HOST"],比较保险和可靠。

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :