查看: 19|回复: 1
打印 上一主题 下一主题

[PHP常量详解] 详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别

[复制链接]

34

主题

48

帖子

874

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
874
跳转到指定楼层
楼主
详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别


实例:

1,https://www.cnzaz.com/aaa/ (打开aaa中的index.php)
结果:
  1. $_SERVER['QUERY_STRING'] = "";
  2. $_SERVER['REQUEST_URI']??= "/aaa/";
  3. $_SERVER['SCRIPT_NAME']??= "/aaa/index.php";
  4. $_SERVER['PHP_SELF']? ???= "/aaa/index.php";
复制代码
2,https://www.cnzaz.com/aaa/?p=222 (附带查询)
结果:
  1. $_SERVER['QUERY_STRING'] = "p=222";
  2. $_SERVER['REQUEST_URI']??= "/aaa/?p=222";
  3. $_SERVER['SCRIPT_NAME']??= "/aaa/index.php";
  4. $_SERVER['PHP_SELF']? ???= "/aaa/index.php";
复制代码
3,https://www.cnzaz.com/aaa/index.php?p=222&q=333
结果:
  1. $_SERVER['QUERY_STRING'] = "p=222&q=333";
  2. $_SERVER['REQUEST_URI']??= "/aaa/index.php?p=222&q=333";
  3. $_SERVER['SCRIPT_NAME']??= "/aaa/index.php";
  4. $_SERVER['PHP_SELF']? ???= "/aaa/index.php";
复制代码
由实例可知:$_SERVER["QUERY_STRING"]??获取查询 语句,实例中可知,获取的是?后面的值
$_SERVER["REQUEST_URI"]? ?获取 http://localhost 后面的值,包括/
$_SERVER["SCRIPT_NAME"]? ?获取当前脚本的路径,如:index.php
$_SERVER["PHP_SELF"]? ?? ?当前正在执行脚本的文件名




$_SERVER['REQUEST_URI']和$_SERVER["HTTP_X_REWRITE_URL"]的区别


WordPress通过301重定向实现非首先域(非www)跳转向本来是一个很简单事情,由于没弄清楚$_SERVER['HTTP_X_REWRITE_URL'] 和$_SERVER['REQUEST_URI']的区别导致了循环重定向问题。
现在来具体研究下$_SERVER['HTTP_X_REWRITE_URL'] 和$_SERVER['REQUEST_URI']的区别
首先要纠正一部分的观点就是IIS+PHP不支持$_SERVER['REQUEST_URI']
不是,不支持是PHP Version 版本的问题,php4.4.0不支持 $_SERVER['REQUEST_URI'],php5.2.5则增加了支持;

$_SERVER['REQUEST_URI']常用来获当前URL
例如:https://www.cnzaz.com/index.php?p=3
$_SERVER['REQUEST_URI']获得的就是/index.php?p=3这部分

$_SERVER["HTTP_X_REWRITE_URL"]则在IIS下获得的是当前URL,在apache下的值为空
例如:
当前URL:https://www.cnzaz.com/
IIS环境下:
  1. $_SERVER['REQUEST_URI'] = /index.php
  2. $_SERVER["HTTP_X_REWRITE_URL"] =/
复制代码

apache环境下:
  1. $_SERVER['REQUEST_URI'] = /
  2. $_SERVER["HTTP_X_REWRITE_URL"] =”
复制代码
当前URL:https://www.cnzaz.com/index.php
IIS环境下:
  1. $_SERVER['REQUEST_URI'] = /index.php
  2. $_SERVER["HTTP_X_REWRITE_URL"] =/index.php
复制代码

apache环境下:
  1. $_SERVER['REQUEST_URI'] = /index.php
  2. $_SERVER["HTTP_X_REWRITE_URL"] =”
复制代码

温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。

34

主题

48

帖子

874

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
874
沙发
?楼主| cnzaz_admin 发表于 4?天前 | 只看该作者
1,$_SERVER["QUERY_STRING"]
说明:查询(query)的字符串

2,$_SERVER["REQUEST_URI"]
说明:访问此页面所需的URI
3,$_SERVER["SCRIPT_NAME"]
说明:包含当前脚本的路径

4,$_SERVER["PHP_SELF"]
说明:当前正在执行脚本的文件名


实例:
1,https://www.cnzaz.com/ (直接打开主页)
结果:
  1. $_SERVER["QUERY_STRING"] = ""
  2. $_SERVER["REQUEST_URI"] = "/"
  3. $_SERVER["SCRIPT_NAME"] = "/index.php"
  4. $_SERVER["PHP_SELF"]? ???= "/index.php"
复制代码

2,https://www.cnzaz.com/?p=222 (附带查询)
结果:
  1. $_SERVER["QUERY_STRING"] = "p=222"
  2. $_SERVER["REQUEST_URI"] = "/?p=222"
  3. $_SERVER["SCRIPT_NAME"] = "/index.php"
  4. $_SERVER["PHP_SELF"]? ???= "/index.php"
复制代码

3,https://www.cnzaz.com/index.php?p=222&q=cnzaz
结果:
  1. $_SERVER["QUERY_STRING"] = "p=222&q=biuuu"
  2. $_SERVER["REQUEST_URI"] = "/index.php?p=222&q=biuuu"
  3. $_SERVER["SCRIPT_NAME"] = "/index.php"
  4. $_SERVER["PHP_SELF"]? ???= "/index.php"
复制代码

$_SERVER["QUERY_STRING"]获取查询语句,实例中可知,获取的是?后面的值
$_SERVER["REQUEST_URI"] 获取https://www.cnzaz.com后面的值,包括/
$_SERVER["SCRIPT_NAME"] 获取当前脚本的路径,如:index.php
$_SERVER["PHP_SELF"] 当前正在执行脚本的文件名




当前url:"http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']




总结一下,对于QUERY_STRING,REQUEST_URI,SCRIPT_NAME和PHP_SELF,深入了解将有利于我们在$_SERVER函数中正确调用这四个值。通过实例详解$_SERVER函数中QUERY_STRING,REQUEST_URI,SCRIPT_NAME和PHP_SELF掌握四个变量之间的区别。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

!ctb_pusthd! !ctb_last! !ctb_next! 快速回复 !ctb_sctz! !ctb_rtlist! !ctb_kfzx! 搜索 !ctb_qqq!
快速回复 返回顶部 返回列表