代码之家  ›  专栏  ›  技术社区  ›  Hrvoje Hudo

没有ID的URL

  •  5
  • Hrvoje Hudo  · 技术社区  · 16 年前

    我经常看到(重写)没有ID的URL,就像在一些wordpress安装上一样。实现这一目标的最佳方式是什么? 例子: site.com/product/some-product-name/ 也许在缓存中保留页面名称和ID的数组,以避免对每个页面请求进行DB查询?

    4 回复  |  直到 16 年前
        1
  •  3
  •   sergtk    16 年前

    使用ID也会带来同样的难题,实际上——您只是在数据库中检查不同的值。上面URL中的“某个产品名称”部分也是独一无二的。有些人叫他们鼻涕虫(Wordpress,也叫permalinks)。因此,您不是在数据库中查询具有特定ID的行,而是在数据库中查询具有特定slug的行。您不需要知道检索记录的ID。

        2
  •  1
  •   Keith    16 年前

    只要产品名称是唯一的,就不应该成为问题。只要列被索引,按唯一名称查找产品的时间(至少不重要)不会比按数字ID查找产品的时间长。

        3
  •  1
  •   sergtk    16 年前

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

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

        4
  •  1
  •   Devin Reams    16 年前

    您可能知道,也可能不知道,URL正在使用Apache的 修改 单元正如这里提到的,Wordpress在后台是在清除标题或帖子名后分配一个slug。

    Wordpress codex . 更新版本的Wordpress在内部进行重写(no.htaccess editin, wp_rewrite 相反)。这就是为什么对于任何permalink结构都会看到相同的规则集。

    不过,如果你做一些挖掘,你可以找到旧的重写规则。例如:

    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 存在