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



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

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

我在项目中得到了那个 id.php但在 URL 中有 mysite/project.php?id=1,取而代之的是,我怎样才能让它看起来像这个 mysite/project,我想摆脱 .php?id=1,但我想在项目页面上保留 id。 我写这篇文章有点令人困惑,但如果您需要更多信息,请说。 提前致谢!!

您所描述的正确名称是"友好 URL"或"干净 URL"。是的,这通常与"永久链接"的概念有关,它描述了给定URL旨在保持永久有效的事实;但是,"永久链接"实际上并不禁止使用查询参数或保留文件扩展名。

工作原理

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

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

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

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

怎么做

从头开始开发基于 PHP 的路由器并不是那么难,但我不建议您这样做。如果您认为您的项目可能会发展到可能与基于 PHP 的路由器相关的程度,那么考虑使用已经支持路由的开发框架也可能是相关的。大多数PHP框架都包含某种形式的路由。我个人不会推荐任何,只是在谷歌中搜索"PHP框架"。

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

例如,使用 nginx(参见 nginx 重写文档(,你可以得到这样的东西:

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

使用 Apache httpd(请参阅 Apache 的mod_rewrite文档(,您可以通过将其添加到站点根目录中的 .htaccess 文件中来获取等效项:

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

最新更新