5

我经常看到(重写)没有 ID 的 URL,就像在一些 wordpress 安装中一样。实现这一目标的最佳方法是什么?示例:site.com/product/some-product-name/ 也许将页面名称和 ID 数组保存在缓存中,以避免对每个页面请求进行数据库查询?如何避免冲突,以及使用没有 ID 的 url 的其他问题是什么?

4

4 回答 4

3

实际上,使用 ID 会带来同样的难题——您只是在检查数据库中的不同值。上面 URL 的“some-product-name”部分也是独一无二的。有些人称它们为蛞蝓(Wordpress,也称为永久链接)。因此,您不是在数据库中查询具有特定 ID 的行,而是在数据库中查询具有特定 slug 的行。您无需知道 ID 即可检索记录。

于 2008-08-16T16:32:16.787 回答
1

只要产品名称是唯一的,它就不应该成为问题。只要列被索引,就不会花费任何时间(至少不重要)通过唯一名称而不是数字 ID 来查找产品。

于 2008-08-16T16:30:10.143 回答
1

Wordpress 在 wp_posts 表中有一个字段用于 slug。当您创建帖子时,它会根据帖子标题创建一个 slug(如果您是这样配置的),用破折号替换空格(或者我认为您可以将其设置为下划线)。它还去掉了撇号、逗号或诸如此类的东西。我相信它也限制了蛞蝓的总长度。

因此,简而言之,它不会将 URL 动态解码为帖子的标题——表中有一个字段直接匹配帖子名称的 URL 版本。

于 2008-08-16T16:50:44.393 回答
1

您可能知道也可能不知道,这些 URL 正在使用 Apache 的mod_rewrite模块重写。正如这里提到的,Wordpress 在后台处理标题或帖子名称后分配一个 slug。

但是,要回答您的问题,您所描述的是 Wordpress 的“Pretty Permalinks”功能,您可以在Wordpress codex中了解更多信息。较新版本的 Wordpress 在内部进行重写(没有 .htaccess 编辑,而是wp_rewrite)。这就是为什么您会看到任何永久链接结构的相同规则集。

但是,如果您进行一些挖掘,您可以找到旧的重写规则。例如:

RewriteRule ^([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index.php?year=$1&monthnum=$2&day=$3 [QSA,L]

将采用类似的 URL/2008/01/01/并将其定向到/index.php?year=2008&monthnum=01&day=01(并加载日期类别)。

但是,如前所述,product-name存在这样的页面只是因为 Wordpress 已经清理了帖子标题并将其作为字段存储在数据库中。

于 2008-09-18T04:02:36.550 回答