2011-04-20 151 views
3

很多網站實現URL重寫基礎上採取類似的URLURL重寫,如何避免URL尷尬?

/news/ArticleID/Some-Title-Text-Goes-Here/

沿

Rewrite /news/([0-9]*)/.* /news/article.lang?ArticleID=$1

所以

/news/123/Lorem-Ipsum/

線應用重寫規則

是r ewritten到

/news/article.lang?ArticleID=123

由於這一切在乎的是文章ID,標題文本可以是任何東西。

過去我寫了很多這樣的規則,直到今天早上英國一家大型報紙基於這種行爲感到尷尬時才考慮到潛在的問題。

這裏

http://www.independent.co.uk/life-style/food-and-drink/kate-middleton-jelly-bean-expected-to-fetch-500-2269573.html

文章有其URL修改爲

http://www.independent.co.uk/life-style/food-and-drink/utter-PR-fiction-but-people-love-this-shit-so-fuck-it-lets-just-print-2269573.html

這個修改URL被張貼到Twitter和迅速趕到病毒,引起了很多尷尬的報紙有問題。

什麼是最好的方式來防止這種情況發生/減輕影響,而不會失去url重寫的好處?

(我注意到堆棧溢出問題拋出一個301到正確的URL,如果你修改它的URL,這對大多數用戶來說足夠明顯,或者我們應該有一個當前的規範URL和一個先驗列表301'規範和所有其他404'?)

回答

2

在顯示文章的腳本中,檢查請求的URI是否匹配從數據庫中的文章標題計算出的相當連字符的標題。如果不匹配,這樣做一個404

例如,如果你在$article['title']文章的真正稱號,有請求的URI的標題部分解析爲$requested_titlepretty_for_uri($input)把一個字符串轉換成一個URI-友好,連字符的字符串,你要檢查

$requested_title == pretty_for_uri($article['title']) 
+0

從圍繞網絡開始,似乎大多數人都會將301添加到文章的規範URL中。我想我會沿着這條路走下去! – Robb 2011-04-21 10:29:03

-1

上述技巧的作品,因爲它在<article-id>的.html結束,紙的部分和ID之間的部分被忽略。試試吧

http://www.independent.co.uk/life-style/food-and-drink/foo-2269573.html 

這也適用。

不好的網址不是來自url-shortener,而是來自獨立網站的腦死亡url擴展器和URL方案。

一個真正的url-shortener應該創建類似於(你寫的)/news/article.lang?ArticleID=123然後檢查輸入的url是否符合該形式。