当前位置: 首页 > news >正文

PHP中获取当前页面的完整URL php $_SERVER中的SERVER_NAME 和HTTP_HOST的区别

#测试网址:     http://localhost/blog/testurl.php?id=5

//获取域名或主机地址
echo $_SERVER['HTTP_HOST']."<br>"; #localhost

//获取网页地址
echo $_SERVER['PHP_SELF']."<br>"; #/blog/testurl.php

//获取网址参数
echo $_SERVER["QUERY_STRING"]."<br>"; #id=5

//获取用户代理
echo $_SERVER['HTTP_REFERER']."<br>";

//获取完整的url
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
#http://localhost/blog/testurl.php?id=5

//包含端口号的完整url
echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
#http://localhost:80/blog/testurl.php?id=5

//只取路径
$url='http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"];
echo dirname($url);
#http://localhost/blog

 

 

php $_SERVER中的SERVER_NAME 和HTTP_HOST的区别

相同点:
当满足以下三个条件时,两者会输出相同信息。
1. 服务器为80端口
2. apache的conf中ServerName设置正确
3. HTTP/1.1协议规范

不同点:
1. 通常情况:
_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息。
_SERVER["SERVER_NAME"] 默认情况下直接输出apache的配置文件httpd.conf中的ServerName值。

2. 当服务器为非80端口时:
_SERVER["HTTP_HOST"] 会输出端口号,例如:mimiz.cn:8080
_SERVER["SERVER_NAME"] 会直接输出ServerName值
因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT

3. 当配置文件httpd.conf中的ServerName与HTTP/1.0请求的域名不一致时:
httpd.conf配置如下:
<virtualhost *>
ServerName mimiz.cn
ServerAlias www.mimiz.cn
</virtualhost>
客户端访问域名www.mimiz.cn
_SERVER["HTTP_HOST"] 输出 www.mimiz.cn
_SERVER["SERVER_NAME"] 输出 mimiz.cn

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

转载于:https://www.cnblogs.com/Alight/p/4188135.html

相关文章:

  • ASP.NET MVC file download sample
  • 【转】foxmail邮箱我已进清理了为什么还是说我的邮箱已满
  • 【Shell脚本学习8】Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
  • Linux下使用popen()执行shell命令
  • 便利记事本发布说明
  • session的取代者:Json Web Tokens----在客户端存储登陆状态
  • Web安全测试指南--权限管理
  • C#阶段小结
  • gnome3桌面
  • erlang浅谈
  • 安卓下拉刷新
  • Android点击EditText文本框之外任何地方隐藏键盘的解决办法
  • Jquery 调用.net WebService 返回Json、XML方法
  • Silverlight 之 创建
  • hdu 5122 K.Bro Sorting
  • 【comparator, comparable】小总结
  • eclipse的离线汉化
  • ES6核心特性
  • GraphQL学习过程应该是这样的
  • Hibernate【inverse和cascade属性】知识要点
  • JS字符串转数字方法总结
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • mockjs让前端开发独立于后端
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Octave 入门
  • react 代码优化(一) ——事件处理
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Webpack 4 学习01(基础配置)
  • Webpack 4x 之路 ( 四 )
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从零开始在ubuntu上搭建node开发环境
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 深度学习在携程攻略社区的应用
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #QT(TCP网络编程-服务端)
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (翻译)terry crowley: 写给程序员
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (四)鸿鹄云架构一服务注册中心
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .net(C#)中String.Format如何使用
  • .Net小白的大学四年,内含面经
  • @Autowired 与@Resource的区别
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [APIO2015]巴厘岛的雕塑
  • [AX]AX2012 SSRS报表Drill through action
  • [ERROR] Plugin 'InnoDB' init function returned error
  • [hive] 窗口函数 ROW_NUMBER()
  • [json]定义、读写
  • [LeeCode]-Divide Two Integers 不用乘除的除法运算
  • [LeetCode]: 145: Binary Tree Postorder Traversal
  • [LeetCode]—Permutations 求全排列
  • [linux]--关于进程概念(上)