使用PHP设置规范URL问题:首页Canonical指向index.php而非根域名
问题原因
你的规范链接出现这个问题,核心是$_SERVER['PHP_SELF']的特性:当用户访问根域名(https://www.example.com/)时,PHP实际加载的是index.php,所以$_SERVER['PHP_SELF']会返回/index.php,直接拼接就生成了带index.php的规范链接,和你301重定向的目标不一致。
解决方案
修改header.php里的canonical链接代码,判断当前请求的脚本是否是index.php,如果是,就输出根域名,否则保留原有路径:
<?php $canonical_path = $_SERVER['PHP_SELF']; if ($canonical_path === '/index.php') { $canonical_path = '/'; } ?> <link rel="canonical" href="https://www.example.com<?php echo $canonical_path; ?>" />
或者用更简洁的三元表达式写法:
<link rel="canonical" href="https://www.example.com<?php echo $_SERVER['PHP_SELF'] === '/index.php' ? '/' : $_SERVER['PHP_SELF']; ?>" />
可选优化
如果想让内部PHP环境也统一识别根请求,可在.htaccess里补充一条内部重写规则(不对外跳转,仅内部处理),进一步强化路径一致性:
RewriteCond %{REQUEST_FILENAME} index.php RewriteRule ^index\.php$ / [L]
内容的提问来源于stack exchange,提问作者Emanuel
相关产品推荐
相关产品推荐

