您现在的位置是:娱乐 >>正文
tp5获取域名
娱乐816人已围观
简介在TP5项目里取当前域名,最直接的方式是拿 $_SERVER['HTTP_HOST']。这东西返回的是带端口的主机名,比如 example.com:8080 或者 localhost:8000。很多人 ...
在TP5项目里取当前域名,域名最直接的域名方式是拿 $_SERVER['HTTP_HOST']。这东西返回的域名是带端口的主机名,比如 example.com:8080 或者 localhost:8000。域名很多人在本地开发时用 localhost 访问,域名线上又换成正式域名,域名代码里如果硬编码了域名,域名部署时就得手动改一遍。域名用 HTTP_HOST 至少能保证当前访问的域名域名是动态获取的。
但光有 HTTP_HOST 不够。域名协议部分——是域名 http 还是 https——得另外判断。TP5 里有个现成的域名助手函数 request(),它返回一个 Request 对象,域名可以直接调 ->domain() 或者 ->url()。域名不过 domain() 返回的域名格式是 http://example.com,不带末尾斜杠,也不带端口以外的路径。如果你需要完整的根地址,这个函数够用。
我自己习惯用 request()->domain(),因为它在 https 环境下会自动识别协议。TP5 的 Request 类里判断协议的逻辑是看 $_SERVER['HTTPS'] 是否开启,或者看 HTTP_X_FORWARDED_PROTO 头。如果你的项目前面挂了 Nginx 反向代理,后者就特别关键。没配好这个头,domain() 会错误地返回 http://,导致前端资源加载被浏览器拦截。
举个例子。之前有个客户的项目部署在阿里云 SLB 后面,TP5 的 request()->domain() 一直返回 http://,但站点实际是 https。查了半天,发现 Nginx 没把 X-Forwarded-Proto 传给 PHP。在 Nginx 配置里补上 proxy_set_header X-Forwarded-Proto $scheme; 之后,问题消失。所以别以为调个函数就万事大吉,服务器环境得配合。
还有一种情况:项目跑在子目录里,比如 https://example.com/tp5/。这时候 domain() 只返回 https://example.com,子目录部分丢了。如果你要生成带子目录的链接,得用 request()->root() 或者 request()->url() 再截取。root() 返回的是 https://example.com/tp5,不带入口文件。而 url() 返回的是完整当前 URL,包括查询字符串。看需求选。
有人问,那直接用 $_SERVER['REQUEST_SCHEME'] 行不行?这变量在 Apache 下通常有,Nginx + PHP-FPM 下经常不存在。所以还是走 TP5 的封装更稳。TP5 的 Request::domain() 内部其实也是拼 $_SERVER,但它做了兼容处理,省得你写一堆 if 判断。
再提一个细节:HTTP_HOST 和 SERVER_NAME 的区别。HTTP_HOST 来自客户端请求头,用户可以伪造;SERVER_NAME 来自服务器配置,更可信。如果你用域名做敏感逻辑(比如根据域名切换数据库),别信 HTTP_HOST。TP5 的 domain() 默认用 HTTP_HOST,要改的话得自己重写或者用 Request::instance()->server('SERVER_NAME')。
最后给个实际代码片段,放在控制器里:
$domain = request()->domain(); // 返回 http://example.com 或 https://example.com $host = request()->host(); // 返回 example.com 或 example.com:8080 $root = request()->root(); // 返回 http://example.com/subdir 三个方法各有用处。要拼完整 URL 用 domain(),要拿纯主机名用 host(),要处理子目录用 root()。别混着用,否则路径重复或者协议错乱。我见过有人在 domain() 后面又拼 /public,结果线上环境入口文件在根目录,直接 404。先搞清楚自己的部署结构,再决定用哪个。
Tags:
相关文章
电力工具检测是国家强制性规定
娱乐2024年春天,我在浙江一家小型电力设备厂里,亲眼看见质检员老周把一批刚下线的绝缘手套扔进了废品堆。那是整整两百双,每双成本价超过八十元。厂长冲过来理论,老周只说了句:“这批货过不了耐压测试,漏电率超 ...
【娱乐】
阅读更多asp编程网址
娱乐```html asp编程网址 asp编程网址 打开浏览器,输入 www.asp.net,回车。这个域名现在跳转到微软的.NET官网,但在2000年前后,它是无数ASP开发者每天必刷的入口 ...
【娱乐】
阅读更多制作php网页的软件s开头
娱乐打开编辑器写PHP,第一步不是敲代码,是选个顺手的工具。市面上以S开头的PHP开发软件不少,但真正能让人长期用下去的,其实就那么几个。我自己的主力机是Windows,偶尔切Mac,这些年折腾过的编辑器 ...
【娱乐】
阅读更多