许多网站基于类似于
的网址实施网址重写 /news/ArticleID/Some-Title-Text-Goes-Here/
沿
行应用重写规则 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
将其网址修改为
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
此修改后的网址已发布到Twitter,并迅速传播,导致该报纸陷入很多尴尬。
防止这种情况发生的最佳方法是什么/缓解效果而不会失去网址重写的好处?
(我注意到Stack Overflow问题如果你修改了它的URL会将301抛给正确的URL,这对于大多数用户来说是显而易见的,或者我们是否应该有一个当前的规范URL和一个前辈列表301规范和所有其他404'ing?)
答案 0 :(得分:2)
在显示文章的脚本中,检查请求的URI是否与从数据库中的文章标题计算的漂亮的带连字符的标题匹配。如果不匹配,请执行类似404的操作。
例如,如果您在$article['title']
中有文章的真实标题,请将所请求URI的标题部分解析为$requested_title
,pretty_for_uri($input)
将字符串转换为URI友好的,带连字符的字符串,你想要检查
$requested_title == pretty_for_uri($article['title'])
答案 1 :(得分:-1)
上述技巧有效,因为它以<article-id>
。html结尾,并且文章部分与id之间的部分被忽略。试试吧
http://www.independent.co.uk/life-style/food-and-drink/foo-2269573.html
也可以。
这个坏网址不是来自网址缩短器,而是来自独立的脑死网扩展器和URL方案。
真正的网址缩短器应该创建类似(你写的内容)/news/article.lang?ArticleID=123
的内容,然后检查输入的网址是否遵循该格式。