没有ID的网址

时间:2008-08-16 16:24:59

标签: url rewrite

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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

只要产品名称是唯一的,就不应该成为问题。只要列被编入索引,就不会再使用唯一名称查找产品(至少不是很重要),而只需使用数字ID。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

正如您可能知道或不知道的那样,URL正在使用Apache的 mod_rewrite 模块重写。正如这里所提到的,Wordpress在后台,在对标题或帖子名称进行消毒后分配了一个slu。。

但是,要回答您的问题,您所描述的是Wordpress的“非常永久链接”功能,您可以在Wordpress codex中了解有关它的更多信息。较新版本的Wordpress在内部重写(没有.htaccess editin,而不是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已经对帖子标题进行了清理并将其存储为数据库中的字段。