友好的URL数据库策略

时间:2015-06-24 19:57:34

标签: php mysql rest

我有一个网站,我想开始使用友好的URL 所以而不是:

  

http://server.com/company.php?id=12

我可以使用:

  

http://server.com/company/steaks_r_us

我知道如何在.htaccess方面执行此操作,但我不知道如何在数据库调用的后端设置它,特别是如果公司名称可能不是唯一的(多个位置)例如)。

我考虑过在检查重复项后将友好的url插入数据库,但我很好奇是否有更好的方法

3 个答案:

答案 0 :(得分:1)

无论是ID还是用户友好的字符串(如公司名称),您都需要将其作为唯一标识符。你不会避免这种情况。

有几种选择。

  1. 有些网站会将ID(主键)添加到用户友好名称中,例如:
  2.   

    http://server.com/company/steaks_r_us_12

    或在URL的其他部分,如:

      

    http://server.com/company/12/steaks_r_us

    然后,您可以轻松地从URL中获取ID,但它看起来仍然很好。

    1. 另外,正如wheatin建议的那样,您可以在数据库中创建一个将成为此唯一标识符的字段。
    2. 在这种情况下,在数据库中创建公司行时需要一些额外的逻辑。这当然是因为你必须以某种方式处理重复的名称。你可以例如在这个值上添加一个数字(facebook做类似的事情),所以如果出现steaks_r_us的副本,你就是会插入一个值steaks_r_us2 然后,您将拥有这些公司的唯一网址:

        

      http://server.com/company/steaks_r_us

        

      http://server.com/company/steaks_r_us2

答案 1 :(得分:0)

您可以在业务键(在本例中为公司名称)上创建唯一索引,以防止首先插入重复项。

答案 2 :(得分:0)

Wheatin有正确的想法。您希望拥有一个包含两列的表格,URL和它所引用的ID。如果您在URL列上创建了一个唯一键,那么您可能只有一个函数/方法尝试插入带有内容ID的干净URL;我经常做像

这样的事情
object-fit: cover

在最后添加一个数字是一种很好的自动防故障方法,可以确保始终返回一个唯一的URL。排序Drupal或Wordpress如何处理具有相同名称的帖子网址。