我正在考虑构建一个 CMS,我想为我的帖子实现类似 wordpress 的永久链接。我怎么做?
我的意思是,如何为我的页面定义自定义 url 结构?
3 回答
我建议创建传递 URL 参数的链接,例如 ..."http://...PostID?123&CatID=232&..." 以便当用户单击该特定链接时,您可以解析参数在 URL 中,并根据 id 获取确切的帖子,甚至根据需要通过传入其他字段进行进一步过滤。
如果你想自己构建整个东西,首先要了解前端控制器是什么,因为它真正解决了如何为不同的 URL 执行相同的代码的根本问题。有了这种理解,有两种方法可以解决这种设计模式的问题:URL 重写或物理文件生成。
网址重写
通过 URL 重写,您需要拦截请求的 URL 并将其发送到您的前端控制器。通常这是在 Web 服务器级别完成的,尽管一些应用程序服务器也充当 Web 服务器。正如其他人发布的那样,使用 Apache,您可以使用带有如下规则的 mod_rewrite:
RewriteRule ^/(.*) /path/to/front/controller.ext [E=REQUEST_URI:%{REQUEST_URI},QSA,PT,NS]
使用此规则,最初请求的路径将作为名为“REQUEST_URI”的变量发送到前端控制器。请注意,我不确定 PHP 中访问它的正确语法。在前端控制器散列(例如 MD5)中,该值并使用它从数据库中查找记录 - 考虑到您使用的任何散列算法都会产生重复。如果您允许 URL 超过数据库中 varchar 数据的最大列大小,则哈希是必需的,假设您无法搜索 CLOB。
物理文件生成
物理文件生成将创建一个映射到您想象的永久 URL 的文件。因此,您将编写一些在发布文件时创建/重命名文件的内容。这消除了存储散列的需要,而是您将有关要在该文件中提供的帖子的信息(即帖子的 ID)放入并将其传递给前端控制器。
推荐
我的偏好是 URL 重写方法,因此您不必担心在运行时编写动态代码文件。也就是说,如果你想要一些不那么神奇的东西,或者你期望有很多请求,那么物理文件生成是可行的方法,因为它更明显并且需要服务器做更少的工作。