所以,如果用户1种类型“http://www.facebook.com/index.php”和用户2种类型“http://facebook.com”和用户3种类型的“www.facebook.com”,怎么办我最好的人“转换”到什么,这些都决心: “http://www.facebook.com/”
您将通过修复无效URL来解决用户3。 www.facebook.com
不是一个URL,但你可以猜测http://
应该开始。空路径部分与/
路径相同,因此您可以确定需要继续完成。一个好的URL解析器应该能够做到这一点。
您可以通过向URL发送HTTP HEAD请求来解析用户2。如果它的状态代码为301
,您将永久重定向到Location
响应标题中的实际URL。 Facebook做到这一点,发送facebook.com
流量到www.facebook.com
,这绝对是网站应该做的事情(尽管在现实世界许多人都没有)。您可以考虑允许3xx
系列中的其他重定向状态代码执行相同的操作;这并不是真的,但有些网站使用302
而不是301
作为重定向,因为它们有点厚。
如果你有时间和网络资源(加上更多的代码来防止这个功能被滥用给你或其他人),你也可以考虑获取目标网页并解析它(假设它不是HTML) 。如果页面中有<link rel="canonical" href="..." />
元素,则应该将该URL视为正确的。 (查看源代码:堆栈溢出这样做。)
但是,不幸的是,用户1的情况下不能解决。 Facebook正在登录/
页面和/index.php
页面,虽然我们可以看到他们并说他们是一样的,但没有技术方法来描述这种关系。在理想的世界中,Facebook将包括301
重定向响应或<link rel="canonical" />
告诉人们/
是访问特定资源而不是/index.php
(或反之亦然)的正确格式URL。但他们不这样做,实际上大多数数据库驱动的网站也没有这样做。
为了解决这个问题,一些搜索引擎(*)在不同的[sub]域比较内容,并且在有限的程度上也会在同一个主机上比较不同的路径,并且猜测它们是相同的足够相似。当然这是很多工作,需要大量的存储和处理,并且最终不是非常可靠。
除了修正用户3的情况之外,我不会打扰大部分内容。从你的描述来看,“相同”的页面似乎并不必须分享真实的身份,除非你没有提到一个特定的用例。
(*:好了,反正谷歌;更传统的那些传统上不和将愉快地满足了对于同一页面的多个链接,但我会承担其他专业,现在正在做类似的东西)
检查del.icio.us如何保存链接... – 2010-01-20 01:55:05