没有ID的网址

时间:2020-03-05 18:40:04  来源:igfitidea点击:

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

解决方案

回答

只要产品名称唯一,就不成问题。只要索引了列,通过唯一名称查找产品所需的时间就不会比数字ID多得多(至少不重要)。

回答

实际上,使用ID会带来相同的难题-我们只是在检查数据库中的其他值。上面网址的"某些产品名称"部分也是唯一的。有人称它们为" ug"(Wordpress,也是永久链接)。因此,我们不是在数据库中查询具有特定ID的行,而是在数据库中查询具有特定段的行。我们不需要知道ID即可检索记录。

回答

Wordpress在wp_posts表中有一个用于该段的字段。创建帖子时,它会根据帖子标题(如果是这样配置的话)创建一个子弹,并用破折号替换空格(或者我认为我们可以将其设置为下划线)。它还会删除撇号,逗号或者其他内容。我相信它也限制了弹头的总长度。

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

回答

我们可能知道,也可能不知道,URL正在使用Apache的mod_rewrite模块进行重写。如此处所述,Wordpress在清除标题或者帖子名称后在后台分配一个标签。

但是,要回答问题,我们要描述的是Wordpress的" Pretty Permalinks"功能,我们可以在Wordpress Codex中对其进行更多了解。较新版本的Wordpress在内部进行重写(没有.htaccess editin,而是wp_rewrite)。这就是为什么我们将为任何永久链接结构看到相同的规则集的原因。

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

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

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

但是,如前所述,仅由于Wordpress已清除帖子标题并将其作为字段存储在数据库中而存在"产品名称"之类的页面。