2
4

1 回答 1

1

当您将带有单个index.php端点(有时也称为Front Controller)的 URL 布局从 query-info-part ( ) 迁移(更改)?action=<page-name>到 path-part (在 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/mainPageindex.php/which 可能对您的情况有更好的语义:

<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 文档以及您的服务器端脚本和整体应用程序。

于 2021-10-29T16:39:05.973 回答