Url rewriting URL重写,如何避免URL尴尬?

Url rewriting URL重写,如何避免URL尴尬?,url-rewriting,Url Rewriting,很多网站都基于类似于的URL实现URL重写 /news/ArticleID/此处有一些标题文本/ 按照以下行应用重写规则: Rewrite/news/([0-9]*)/.*/news/article.lang?ArticleID=$1 所以 /news/123/Lorem Ipsum/ 被改写为 /news/article.lang?ArticleID=123 因为这里只关心文章id,所以标题文本可以是任何内容 我以前写过很多这样的规则,但我没有考虑到这是一个潜在的问题,直到今天早上英国一家主要

很多网站都基于类似于的URL实现URL重写

/news/ArticleID/此处有一些标题文本/

按照以下行应用重写规则:

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

所以

/news/123/Lorem Ipsum/

被改写为

/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重写的好处的情况下,防止这种情况发生/减轻影响的最佳方法是什么


(我注意到,如果修改其URL,堆栈溢出问题会将301抛出到正确的URL,这对大多数用户来说是否足够明显,或者我们是否应该有一个当前的规范URL和一个优先级为301'的列表,以及所有其他优先级为404'的列表?

在显示文章的脚本中,检查请求的URI是否与根据数据库中的文章标题计算出的漂亮连字符标题匹配。如果它不匹配,请执行类似404的操作

例如,如果您在
$article['title']
中有文章的真实标题,请将请求URI的标题部分解析为
$requested\u title
,并且
pretty\u For\u URI($input)
将字符串转换为URI友好的连字符字符串,您需要检查这一点

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

上述技巧之所以有效,是因为它以
.html结尾,并且忽略了纸张部分和id之间的部分。试试看

http://www.independent.co.uk/life-style/food-and-drink/foo-2269573.html
这同样有效

坏的url不是来自url缩短器,而是来自《独立报》拥有的一个死气沉沉的url扩展器和url方案


真正的url缩短器应该创建类似(您编写的内容)
/news/article.lang?ArticleID=123
的内容,然后检查输入的url是否符合该格式。

在网络上搜索时,大多数人似乎会对文章的规范url添加301。我想我会沿着那条路走,ta!