如何移除HTML HEAD元数据中规范URL的文件扩展名?
解决方法
你可以通过处理$_SERVER['SCRIPT_NAME']的值来移除文件扩展名,下面是修改后的代码:
<link rel="canonical" href="<?php $scheme = $_SERVER['REQUEST_SCHEME']; $host = $_SERVER['SERVER_NAME']; // 移除脚本路径中的文件扩展名 $scriptPath = preg_replace('/\.\w+$/', '', $_SERVER['SCRIPT_NAME']); // 处理首页特殊情况:如果原脚本是/index.php,转为根路径/ if ($scriptPath === '/index') { $scriptPath = '/'; } echo $scheme . '://' . $host . $scriptPath; ?>">
代码说明
preg_replace('/\.\w+$/', '', $_SERVER['SCRIPT_NAME']):用正则匹配并移除路径末尾的扩展名(支持.php、.html等常见格式)- 首页判断逻辑:避免首页的canonical链接显示为
/index,自动转为更标准的根路径/ - 拆分变量让代码结构更清晰,新手也能轻松看懂和调整
替代实现(用pathinfo函数)
如果对正则表达式不太熟悉,也可以用PHP内置的路径解析函数pathinfo来实现:
<link rel="canonical" href="<?php $scheme = $_SERVER['REQUEST_SCHEME']; $host = $_SERVER['SERVER_NAME']; $pathDetails = pathinfo($_SERVER['SCRIPT_NAME']); $scriptPath = $pathDetails['dirname'] . '/' . $pathDetails['filename']; // 修复目录拼接可能出现的多斜杠问题 $scriptPath = preg_replace('|//+|', '/', $scriptPath); // 处理首页情况 if ($scriptPath === '/index') { $scriptPath = '/'; } echo $scheme . '://' . $host . $scriptPath; ?>">
这个方法通过拆解路径的目录和文件名部分,再重新拼接,同样能移除扩展名,逻辑更直观。
内容的提问来源于stack exchange,提问作者Jordan Clark
相关产品推荐
相关产品推荐

