如何最好地规范化URL

时间:2010-01-20 01:46:25

标签: search url resolveurl

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

因此,如果用户1输入“http://www.facebook.com/index.php”并输入“http://facebook.com”中的用户2类型和“www.facebook.com”中的用户3类型,我该如何最好地将它们“转换”为什么这些都解决了:“http://www.facebook.com/

后端是Python ......

搜索引擎如何跟踪网址?他们是否保留了一个URL然后采取它所解决的内容,或者他们是否会抛出与他们解决的内容不同的URL并且只关心已解析的版本?

感谢!!!

3 个答案:

答案 0 :(得分:3)

  

因此,如果用户1输入“http://www.facebook.com/index.php”并输入“http://facebook.com”中的用户2类型和“www.facebook.com”中的用户3类型,我该如何最好地将它们“转换”为什么这些都解决了:“http://www.facebook.com/

您可以通过修复无效网址来解析用户3。 www.facebook.com不是网址,但您可以猜测http://应该在开始时使用。空路径部分与/路径相同,因此您可以确保它也需要结束。一个好的URL解析器应该能够做到这一点。

您可以通过向URL发出HTTP HEAD请求来解析用户2。如果它返回状态代码为301,则您可以永久重定向到Location响应标头中的真实网址。 Facebook这样做可以将facebook.com流量发送到www.facebook.com,这绝对是网站应该做的事情(即使在现实世界中很多都没有)。您可以考虑允许3xx系列中的其他重定向状态代码执行相同操作;这不是正确的做法,但有些网站使用302代替301进行重定向,因为它们有点厚。

如果您有时间和网络资源(加上更多代码以防止该功能被您或其他人使用),您还可以考虑GET目标网页并对其进行解析(假设结果是HTML)。如果页面中有<link rel="canonical" href="..." />元素,您还应该将该URL视为正确的URL。 (查看源代码:Stack Overflow执行此操作。)

然而,遗憾的是,用户1的情况无法解决。 Facebook正在/处提供一个页面,在/index.php处提供一个页面,虽然我们可以查看它们并说它们是相同的,但没有技术方法来描述这种关系。在一个理想的世界中,Facebook会包含301重定向回复或<link rel="canonical" />,告诉人们/是访问特定资源的正确格式网址,而不是/index.php(或相反亦然)。但他们没有,事实上大多数数据库驱动的网站也没有这样做。

为了解决这个问题,一些搜索引擎(*)会比较不同[子]域的内容,并且在有限的范围内比较同一主机上的不同路径,如果内容足够,则猜测它们是相同的类似。当然,这需要大量的工作,需要大量的存储和处理,并且最终不是非常可靠。

除了在用户3案例中修复URL之外,我不会真正打扰其中的大部分内容。根据您的描述,“相同”的页面必须分享实际身份似乎并不重要,除非有一个您没有提及的特定用例。

(*:嗯,谷歌无论如何;更传统的传统上没有,并且很乐意为同一页面提供多个链接,但我认为其他专业现在正在做类似的事情。)

答案 1 :(得分:0)

除了关于特定网站的“神奇”知识之外,没有办法知道“/index.php”与取得“/”相同。所以,如上所述,你的问题是不可能的。

答案 2 :(得分:0)

我将3个链接保存为分开,因为你永远无法可靠地告诉他们解析同一页面。这一切都取决于服务器(我们无法控制)如何解析网址。

相关问题