2011-11-21 92 views
1

用戶友好的URL我有一個包含一個名爲歌曲與現場標題表的數據庫。 現在如果我的網址是http://www.foo.com/songs/xxx(xxx =歌曲的標題), apache正悄悄地重定向到一個類似於:/song.php?title=xxx的頁面。 (因爲我知道一些瀏覽器顯示%20而不是空格,而不是%20really%20user%20friendly%20ya%20know%20what%20i%20mean)。可靠與數據庫

還有一個障礙原因如果標題包含空格和下劃線(例如DJ_underscore fx)和腳本把它轉換成DJ_underscore_fx的SQL:

select * from songs where songs.title=xxx 

無法找到它。

這裏的草圖更具體:

  • 腳本讀取數據庫中的不同標題
  • 所有的空間轉換爲下劃線(如name_of the song - > name_of_the_song
  • 將它們作爲鏈接回顯(例如,<a href="/songs/name_of_the_song">name_of_the_song</a>
  • 用戶單擊鏈接並將r請求文檔
  • apache默默重定向(例如, /songs/name_of_the_son - > /song.php?title=name_of_the_song
  • song.php取得具體的數據(例如select * from songs where songs.title=name_of_the_song

OK你看,有一個在看起來像name_of_the_songname_of the song數據庫中沒有條目。

如何管理整個讓我的網址仍然清晰,標題領域不限於一定量的值(可以有空格,下劃線,破折號,以及什麼)?

回答

3

只需添加另一個字段,它將保留URL中使用的確切名稱。而當你有一些「重複」 - 只需追加他們的_2,_3等,或給用戶編輯和另一個名字手動的方式。

+2

或者做類似'/ 1234/name-of-whatever /'其中'1234'是對象的ID,'name-of-whatever'被腳本忽略。 – Polynomial

+1

@Polynomial:它甚至好多了。你應該把它作爲一個單獨的答案 – zerkms

+0

@zerkms我想到了這個解決方案,但當我花了很多分鐘來解決我的請求,我現在想不到現在,我只是希望那裏會有其他解決方案,謝謝無論如何,我只是等待更多的答案,但得到檢查答案 – user544262772

0

好吧,如果你想在url中使用空格,人們會將它用於過境編碼。如果不是用空格替換所有_,只需使用uridecoder(不記得確切的標題)。它仍然允許鍵入空格。在顯示器上,鏈接中顯示的文字,你不能做一個str_replace轉換空格%20?

要麼就是有標題的電腦友好的版本(不使用空格,但是下劃線)和一個用戶友好的列確有空格

1

是definetly你的努力實現了錯誤的方式,你可能會有數百個變體在你的數據庫中查找,也對SEO不利。

首先設置一條規則,即所有URL都有_來分隔空間,這就是大多數網站URL的完成方式(以digg.com爲例)。

然後創建一個存儲URL的單獨字段,例如

title  | url 
song name | song_name 

然後根據URL字段進行查找。

由於遺留原因,當您在執行數據庫查詢之前從GET接收標題時,您還可以在查找腳本中用_替換空格。

5

使用類似/1234/name-of-page/的地方,其中1234是該行的主鍵ID,name-of-page被腳本忽略。

這給直接鏈接到表中的條目的主鍵,它會給你幾個好處:

  1. 沒有必要有重複的ID字段。
  2. 快速索引SELECT查詢。
  3. 您仍然可以獲得「漂亮」網址的可讀性和SEO優勢。

您可能注意到,StackOverflow的本身正是這樣做的:

/questions/8211267/user-friendly-urls-reliable-with-the-database/

這可能被重新編寫,是這樣的:

question.php?id=8211267

+1

+1。 [這是要走的路](http://stackoverflow.com/questions/2647789/problem-in-displaying-a-url-slug-with-dash/2647828#2647828)。 – Shef

+0

你的幫助是珍貴的朋友,非常感謝... – user544262772