You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用$_SERVER["PATH_INFO"]替代GET参数路由时<a>链接路径异常问题排查

问题原因分析与解决方案

你遇到的问题本质是浏览器对相对URL的解析规则导致的。当你的URL是www.universitydomain.subdomain/myProject/index.php/imageGallery时,浏览器会把index.php识别成一个目录名称(而不是PHP文件),此时页面的基准路径就从/myProject/变成了/myProject/index.php/。后续点击相对路径的链接时,浏览器会基于这个新的基准路径拼接URL,就出现了index.php/index.php这种错误路径。

而之前用GET参数的方式(比如index.php?action=imageGallery),浏览器会正确识别index.php是一个文件,基准路径保持为/myProject/,所以相对链接跳转都是正常的。

下面给你几个可行的解决方案:

1. 使用绝对路径链接

直接把所有<a>标签的href改成以根目录开头的绝对路径,这样不管当前页面的基准路径是什么,浏览器都会从网站根目录开始解析:

<a href="/myProject/index.php" > Main page </a>
<a href="/myProject/index.php/imageGallery" > Gallery </a>
<a href="/myProject/index.php/addImage" > Add image </a>

这个方法简单直接,适合部署路径固定的场景。

2. 页面头部添加<base>标签

在HTML的<head>区域添加<base>标签,明确指定页面所有相对URL的基准路径:

<head>
  <base href="/myProject/">
</head>

之后你的相对链接就可以保持原来的写法,浏览器会自动基于<base>指定的路径拼接:

<a href="index.php" > Main page </a>
<a href="index.php/imageGallery" > Gallery </a>
<a href="index.php/addImage" > Add image </a>

⚠️ 注意:如果你的页面里有相对路径引用的资源(比如CSS、JS、图片),也要确保这些路径能基于<base>正确解析,避免资源加载失败。

3. PHP动态生成绝对路径

如果你的项目可能部署在不同的目录下,不想硬写固定路径,可以用PHP动态生成基准URL:

<?php
// 生成当前项目的基准URL
$baseUrl = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['SCRIPT_NAME']) . '/';
?>

<a href="<?php echo $baseUrl; ?>index.php" > Main page </a>
<a href="<?php echo $baseUrl; ?>index.php/imageGallery" > Gallery </a>
<a href="<?php echo $baseUrl; ?>index.php/addImage" > Add image </a>

这种方式会自动适配当前的部署路径,灵活性更高,适合需要多环境部署的项目。

内容的提问来源于stack exchange,提问作者Tom Clabault

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 23:29:08