如何更改现有永久链接(PHP、HTML、CSS)

How to change existing permalink (PHP, HTML, CSS)

我对永久链接有疑问(我认为这些被称为永久链接)。 我正在使用 PHP、HTML 和 CSS 开发网站。主要问题是当我将数据发送到另一个页面时,例如:

<a href="project.php?id=1">Project</a>

我在 project.php 中得到了那个 id,但是在 URL 中有 mysite/project.php?id=1,而不是那个,我怎样才能让它看起来像像这样 mysite/project,我想摆脱 .php?id=1,但我想在项目页面上保留 id。 我写这个 post 有点混乱,但如果您需要更多信息,请直接说。 提前致谢!!!

您所描述的内容的正确名称是“friendly URL" or "clean URL". Yes, that often relates with the notion of "permalinks”,它描述了给定的 URL 旨在保持永久有效的事实;但是 "permalinks" 实际上并不禁止使用查询参数或保留文件扩展名。

工作原理

现在,PHP 中友好 URL 的实现总是从在 Web 服务器级别添加某种形式的位置处理程序开始。本质上,您需要 Web 服务器了解 /mysite/project/<id> 形式的请求实际上需要委托给某些特定的 PHP 脚本(稍后会详细介绍)。

然后,您还需要某种形式的路由机制来解码原始 URL,决定请求什么操作以及要提供什么参数;例如,该路由机制将解码 URL /mysite/project/2 并确定它必须 return 项目页面模板,填充项目 ID 2.

在复杂的 PHP 应用程序中,这两个问题通常会分开处理。在这种情况下,将在 Web 服务器的配置文件中添加一个规则,该规则将每个请求(对静态资产的请求除外)重定向到唯一的 PHP 入口点,传统上称为 "index.php"。然后,该文件中的某些算法将检查 $_SERVER['REQUEST_URI'] 变量,对其进行解码,并确定要调用的 PHP 函数以及使用哪些参数。这种算法通常命名为 "router"。例如,这就是 WordPress、Magento 或 Prestashop 等应用程序的工作方式。

或者,也可以在 Web 服务器级别处理这两个问题,并且在非常小的项目上这样做通常更容易(请注意,这种方法有利有弊,我不会在细节在这一点上)。在这种情况下,您可以在 Web 服务器的配置中为每个 URL 模式添加一个重写规则,用其内部等效项替换友好的 URL。例如,/mysite/project/<id> 可以在内部重写为 /mysite/project.php?id=<id>.

怎么做

从头开发一个基于 PHP 的路由器并没有那么难,但我不建议您这样做。如果您认为您的项目可能会发展到需要使用基于 PHP 的路由器的程度,那么考虑使用已经支持路由的开发框架也可能是相关的。大多数 PHP 框架都包含某种形式的路由。我个人不推荐,直接在Google.

中搜索"PHP frameworks"

至于通过在 Web 服务器级别重写规则来实现友好的 URLs,语法显然取决于您使用的 Web 服务器。大多数服务器为此目的支持某种形式的基于正则表达式的语法。

例如,使用 nginx(见 nginx rewrite documentation),你可以有这样的东西:

server {
    # ...

    rewrite "^/mysite/project/([0-9]+)$" /mysite/project.php?id=;

    # ...
}

使用 Apache httpd(参见 Apache's mod_rewrite documentation),您可以通过将此添加到站点根目录中的 .htaccess 文件来获得等效项:

RewriteEngine On
RewriteRule "^/mysite/project/([0-9]+)$" "/mysite/project.php?id=" [L]