2015-06-24 84 views
1

我有一个网站,我想开始使用友好的URL。
因此,而不是:友好的URL数据库策略

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

我可以使用:

http://server.com/company/steaks_r_us

我知道如何做到这一点的。htaccess的一面,但我不知道如何在数据库调用的后端设置它,特别是如果公司名称有可能不是唯一的(例如多个地点)。

我想过检查重复之后插入友好的URL到数据库中,但我很好奇,如果有一个更好的办法

+0

“http:// server.com/company/1”有什么问题? –

+0

@DavidBarker想要我在其上工作的人正试图使网址搜索引擎友好。我想在网址中的名称改善的事情,或至少使它看起来像有更多的网页...只使用/公司/ 1似乎并不会改善很多东西... – AndyD273

回答

1

不管它是一个ID还是用户友好的字符串,如公司名称,您都需要它是一个唯一的标识符。你不会避免这种情况。

有几个选项。

  1. 一些网站添加了ID(主键),以用户友好的名称,如:

http://server.com/company/steaks_r_us_12

或类似URL的其他部分:

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

然后,你可以很容易地从URL中获取ID,但它也看起来不错。

  1. 同样,我们建议您可以在您的数据库中创建一个字段,它将成为此唯一标识符。

在这种情况下,您在创建数据库中的公司行时需要一些额外的逻辑。这当然是因为你必须以某种方式处理重复的名字。例如,您可以在添加一个数字,这个值(Facebook并类似的东西),所以如果steaks_r_us重复发生时,你会插入值steaks_r_us2 那么你就必须为这些公司唯一的URL:

http://server.com/company/steaks_r_us

http://server.com/company/steaks_r_us2

+0

'http:// server.com/company/12/steaks_r_us'这是有前途的(显然,stackoverflow是如何工作的)。我会跑过去一些人 – AndyD273

+0

是的,这是一个很好的解决方案,因为它不需要你修改你的数据库模式。这只是一个正确的路由设置问题。 –

0

您可以创建业务键唯一索引(在这种情况下,公司名称)以防止重复插入到第一位。

+0

我想,但两企业可以合法地拥有相同的名称,并且返回一个错误,说“抱歉,但您的公司名称已被使用”似乎不是最好的方式。 – AndyD273

0

Wheatin有正确的想法。你想要有一个包含两列的表格,URL和它所指的id。如果你在URL列上创建了一个唯一的键,那么你可能只有一个函数/方法试图插入带有内容标识的干净的URL;我通常这样做

###(pseudocode) 

function create_unique_url($url, $id) { 
    try to insert the url, id combination 
    if success: 
     return url 
    else: 
     key = 1 
     start a loop 
      try to insert the url+key, id combination 
      if success: 
       return url 

      key++ 
} 

添加一个数字到底是一个很好的故障安全的方式,以确保您始终获得一个唯一的URL返回。 Drupal或Wordpress如何处理具有相同名称的发布网址。