HTML <a> link 将 'href' 内容连接到现有 URL

HTML <a> link concatenating the 'href' content to existing URL

到目前为止,我一直在使用 GET 参数在我网站(托管在我大学的服务器上)的页面之间进行路由。我想改用 $_SERVER["PATH_INFO"],因为我想这是一种更简洁的页面间路由方式。

我想从:

www.universitydomain.subdomain/myProject/index.php?action=imageGallery

收件人:

www.universitydomain.subdomain/myProject/index.php/imageGallery

我有 3 页:

  1. 我的主页,index.php
  2. 我的图片库页面,当前可访问 当 GET 参数 action 等于“imageGallery”
  3. 用于将图像添加到我的图库的页面,可在 GET 参数 action 时访问 等于“addImage”

此页面的每一页都有一个菜单,由 <a> links:

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

这样做时,一切正常。所以我尝试使用 PATH_INFO 风格 URL 像这样:

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

如果我在画廊页面上,我希望 <a>Main pagey</a> link 在我的 URL 中写入 index.php,这将使我回到主页面页。然而,这发生了:

这是为什么?我无法重现我的问题的最小示例,因此它似乎与我的项目有关(不幸的是,它有点太大,无法包含在这个 post 中)。即使无法重现此问题,你们中的一些人也可能会对此产生共鸣并提出一些建议。

我的印象是,在进入图库页面(其中包含 URL /myProject/index.php/imageGallery)后,我页面的“参考路径”已更改为 /myProject/index.php//myProject/ 因此,当单击 <a href="index.php"> link 时,它会将我重定向到 /myProject/index.php/index.php 而不是 /myProject/index.php/

当您从查询信息部分 (?action=<page-name>) 到路径部分(在 PHP 中通常与 $_SERVER['PATH_INFO'] 一起)并且你引入了额外的路径组件,你可以看到这种行为。这是 URL 解析规则的标准。

query-info               ->  path                      effect

index.php -or- ?, ., ""  ->  index.php                 0 new path components
?action=imageGallery     ->  index.php/imageGallery    + 1 new path component
?action=addImage         ->  index.php/addImage        + 1 new path component

在您非常具体的情况下,为了简化迁移,您可能需要考虑一个快速的解决方法:如果没有给出 PATH_INFO,则重定向到具有相同数量路径组件的主页和其他两页一样。

if (empty($_SERVER['PATH_INFO'])) {
   header('location: index.php/mainPage');
   echo '<!DOCTYPE html><title>moved</title><h1>moved</h1><a href="index.php/mainPage">here</a>.';
   return;
}
<a href="mainPage" > Main page </a>
<a href="imageGallery" > Gallery </a>
<a href="addImage" > Add image </a>

或类似的,将 index.php/mainPage 替换为 index.php/,这可能对您的情况有更好的语义:

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

对于最后两个,./前缀严格来说是没有必要的,这等价于:

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

这可能会让您更好地了解 URL- 布局更改的后果,同时让您的网站保持正常运行。

对于底层的基本理解,我强烈建议研究 URL 分辨率规范,因为这是非常基础的东西,将帮助您做出关于 URL 布局更改以及您将如何更改的自己的决定喜欢将其与 HTML 文档以及服务器端脚本和整个应用程序一起处理。