2011-04-20 109 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是否符合该形式。