【问题标题】:How to avoid conflict when not using ID in URLs没有ID的网址
【发布时间】:2010-09-06 00:09:54
【问题描述】:

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

【问题讨论】:

    标签: url rewrite


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 嗯,它需要更长的时间,但它仍然足够快,不用担心。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        您可能知道也可能不知道,正在使用 Apache 的 mod_rewrite 模块重写 URL。正如这里提到的,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]
        

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

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

        【讨论】:

          猜你喜欢
          • 2012-07-19
          • 2016-05-05
          • 2017-10-02
          • 2021-11-28
          • 2013-11-12
          • 1970-01-01
          • 2019-03-25
          • 2012-12-19
          • 2017-07-04
          相关资源
          最近更新 更多