【发布时间】:2019-01-12 03:04:03
【问题描述】:
这里有几个网址:
http://sub.example.com/?feed=atom&hello=world
http://www.sub.example.com/?feed=atom&hello=world
http://sub.example.com/?hello=world&feed=atom
http://www.sub.example.com/?hello=world&feed=atom
http://www.sub.example.com/?hello=world&feed=atom
http://www.sub.example.com/?hello=world&feed=atom#123
如您所见,它们都指向完全相同的页面,但 URL 格式不同。这是另外两个基本示例:
http://example.com/hello/
http://example.com/hello
两者都是一样的。
我想将 URL 转换成one 标准格式,这样当我将URL 存储在数据库中时,我可以很容易地检查URL 字符串是否已经存在于数据库。
由于 URL 的格式设置方式多种多样,这可能会令人费解。
将 URL 转换为一种标准格式的权威方法是什么?也许parse_url()路线...?
编辑
正如 cmets 中所述,没有明确的解决方案,但我们的目标是尽可能接近我们所拥有的页。在发布此赏金的答案之前,请阅读 cmets。
【问题讨论】:
-
这其实是一个超级有趣的问题。 +1
-
不确定是否有明确的方法,除非您拥有提供这些 URL 的网站。如果不检索每个 URL、创建校验和并比较校验和值,就无法确定或证明所有这些 URL 都是相同的。
-
目的是将 URL 转换为一种标准格式,例如,它将始终为
http://sub.example.com/?feed=atom&hello=world -
这些是不同的网址。
www.sub.*和sub.*理论上可以指向不同的页面。你能做的最好的就是对查询字符串进行排序。同样,尾部斜杠也表示不同的 url。 -
正确的解决方法是打开网址,看看是否返回301重定向;然后存储重定向的 url。或扫描页面寻找
<link rel=canonical>标签。网站使用这两种技术来指示相同 URL 的“首选”变体。