2015-06-24 87 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如何處理具有相同名稱的發佈網址。