0

0

PHP获取泛域名怎么实现_PHP匹配泛域名获取技巧【技巧】

雪夜

雪夜

发布时间:2026-02-16 14:33:11

|

742人浏览过

|

来源于php中文网

原创

php中匹配泛域名需先用正则/^\*\.[a-za-z0-9]([a-za-z0-9\-]{0,61}[a-za-z0-9])?(\.[a-za-z]{2,})+$/验证格式,再通过分段比对尾部域名实现精准模式匹配,并配合filter_var校验安全性。

php获取泛域名怎么实现_php匹配泛域名获取技巧【技巧】

PHP中用preg_match匹配泛域名的正则写法

泛域名(wildcard domain)本质是通配符匹配,不是DNS解析功能,PHP里只能靠正则判断是否符合 *.example.com 这类模式。关键不是“获取”,而是“识别”——先确认输入字符串是否为合法泛域名格式。

常见错误是直接用 parse_url()gethostbyname() 处理,它们根本不支持 *,会返回空或报错。

  • 正确正则:/^\*\.[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z]{2,})+$/
  • * 必须在开头且紧跟 .,不能写成 *.com**.example.com
  • 二级泛域名如 *.sub.example.com 也合法,但需确保每段符合域名规则(不能以连字符开头/结尾)
  • 注意:该正则不校验TLD是否存在,仅做格式验证;真实业务中建议额外查 dns_get_record() 确认主域名可解析

从HTTP Host头提取并判断是否为泛域名匹配

实际场景中,你往往收到一个请求的 Host 值(如 api.example.com),需要判断它是否落在某个泛域名规则(如 *.example.com)下。这不是正则匹配字符串,而是“模式匹配目标”。

别用 str_replace('*', $host, $pattern) 这种粗暴方式——*.example.com 匹配 foo.bar.example.com 是非法的,但那样会误判。

360智图
360智图

AI驱动的图片版权查询平台

下载

立即学习PHP免费学习笔记(深入)”;

  • 先分割泛域名模板:$parts = explode('.', ltrim($wildcard, '*.')); 得到 ['example', 'com']
  • 再分割实际host:$hostParts = explode('.', $host);
  • 检查尾部是否一致:array_slice($hostParts, -count($parts)) === $parts
  • 必须保证 $hostParts 长度 > $parts 长度,否则 example.com 会被误认为匹配 *.example.com

用filter_var校验域名后再做泛匹配

很多人跳过基础校验,直接上正则,结果把 *.exa_mple.com*.example. 当成合法输入。PHP原生有更稳的方式:

  • 先用 filter_var($host, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME) 校验原始host是否为有效域名
  • 对泛域名模板,先去掉 * 和点,再用同样方式校验剩余部分(即 example.com
  • 如果校验失败,直接拒绝,不进入后续匹配逻辑——避免正则绕过导致的逻辑漏洞
  • 注意:FILTER_VALIDATE_DOMAIN 在 PHP 5.6+ 才完整支持,旧版本需降级用 idn_to_ascii() + 正则兜底

$_SERVER['HTTP_HOST']可能被伪造,泛域名匹配不能用于安全决策

泛域名匹配常被用在多租户路由、子站分发等场景,但有个硬伤:$_SERVER['HTTP_HOST'] 完全由客户端控制,可轻易伪造。哪怕你严格匹配了 *.myapp.com,攻击者仍可发请求带 Host: *.myapp.com(注意:这本身是非法host值,但某些Web服务器会透传)。

  • 真正可信的只有 TLS SNI(服务端能拿到)和反向代理设置的 X-Forwarded-Host(需白名单校验)
  • 若用Nginx,应在配置中用 map 提前过滤非法host,PHP层只处理已清洗过的变量
  • 泛域名规则本身不应存于数据库或用户可控配置中;若必须动态加载,请对模板做双重校验(格式 + 是否属于白名单根域)

泛域名匹配看着简单,但跨协议(HTTP/HTTPS)、跨部署(直连/CDN/反代)、跨PHP版本的兼容细节很多,最容易忽略的是——你写的匹配逻辑,到底是在校验输入,还是在替代DNS解析。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

240

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

515

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

566

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

238

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

478

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3586

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

49

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

65

2026.01.13

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

145

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.9万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号