Url rewriting URL重写,如何避免URL尴尬?
很多网站都基于类似于的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,所以标题文本可以是任何内容 我以前写过很多这样的规则,但我没有考虑到这是一个潜在的问题,直到今天早上英国一家主要
/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!