2010-01-20 46 views
1

我正在创建一个网站,允许用户添加关键字 - >网址链接。我希望多个用户能够链接到相同的url(完全相同,相同的对象实例)。如何最好地标准化网址

所以,如果用户1种类型“http://www.facebook.com/index.php”和用户2种类型“http://facebook.com”和用户3种类型的“www.facebook.com”,怎么办我最好的人“转换”到什么,这些都决心:“http://www.facebook.com/

后端是在Python ...

如何做一个搜索引擎跟踪URL的?他们是否保留一个URL,然后采取何种解决办法,或者抛出与解决方案不同的URL,只关心解决的版本?

谢谢!

回答

3

所以,如果用户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的情况之外,我不会打扰大部分内容。从你的描述来看,“相同”的页面似乎并不必须分享真实的身份,除非你没有提到一个特定的用例。

(*:好了,反正谷歌;更传统的那些传统上不和将愉快地满足了对于同一页面的多个链接,但我会承担其他专业,现在正在做类似的东西)

0

除了关于特定网站的“神奇”知识外,没有办法知道“/index.php”与获取“/”相同。

所以,你所说的问题是不可能的。

0

我会保存3链接作为分隔,因为你永远不能可靠地告诉他们解析为同一页。这一切都取决于服务器(不在我们的控制之下)如何解析url。

+0

检查del.icio.us如何保存链接... – 2010-01-20 01:55:05