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 页:
- 我的主页,index.php
- 我的图片库页面,当前可访问
当 GET 参数
action
等于“imageGallery”
- 用于将图像添加到我的图库的页面,可在 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
,这将使我回到主页面页。然而,这发生了:
- 我在
index.php
。
URL 是
www.universitydomain.subdomain/myProject/index.php
- 我点击第二个 link 进入画廊。 URL 变成
www.universitydomain.subdomain/myProject/index.php/imageGallery
- 我点击第一个 link 返回主页。 URL 变成
www.universitydomain.subdomain/myProject/index.php/index.php
- 在第三步,如果我没有返回主页面,而是
点击第三个 link 进入
addImage
页面, URL
成为
www.universitydomain.subdomain/myProject/index.php/index.php/addImage
这是为什么?我无法重现我的问题的最小示例,因此它似乎与我的项目有关(不幸的是,它有点太大,无法包含在这个 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 文档以及服务器端脚本和整个应用程序一起处理。
到目前为止,我一直在使用 GET 参数在我网站(托管在我大学的服务器上)的页面之间进行路由。我想改用 $_SERVER["PATH_INFO"]
,因为我想这是一种更简洁的页面间路由方式。
我想从:
www.universitydomain.subdomain/myProject/index.php?action=imageGallery
收件人:
www.universitydomain.subdomain/myProject/index.php/imageGallery
我有 3 页:
- 我的主页,index.php
- 我的图片库页面,当前可访问
当 GET 参数
action
等于“imageGallery” - 用于将图像添加到我的图库的页面,可在 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
,这将使我回到主页面页。然而,这发生了:
- 我在
index.php
。 URL 是www.universitydomain.subdomain/myProject/index.php
- 我点击第二个 link 进入画廊。 URL 变成
www.universitydomain.subdomain/myProject/index.php/imageGallery
- 我点击第一个 link 返回主页。 URL 变成
www.universitydomain.subdomain/myProject/index.php/index.php
- 在第三步,如果我没有返回主页面,而是
点击第三个 link 进入
addImage
页面, URL 成为www.universitydomain.subdomain/myProject/index.php/index.php/addImage
这是为什么?我无法重现我的问题的最小示例,因此它似乎与我的项目有关(不幸的是,它有点太大,无法包含在这个 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 文档以及服务器端脚本和整个应用程序一起处理。