【问题标题】:UTF8 component in URL, should it be case sensitive?URL中的UTF8组件,它应该区分大小写吗?
【发布时间】:2012-07-19 07:30:00
【问题描述】:

我知道 URL 应该区分大小写,例如

http://www.example.com/test.php


http://www.example.com/TEST.php

应该是两件事。

但 UTF-8 是否也应该区分大小写,例如?

http://zh.wikipedia.org/wiki/%E8%A7%82%E6%B5%8B%E5%A4%A9%E6%96%87%E5%AD%A6

http://zh.wikipedia.org/wiki/%e8%a7%82%e6%b5%8b%e5%a4%a9%e6%96%87%e5%ad%a6

他们应该平等吗?

我问的原因是:Googlebot 继续使用 URL 的大写形式,尽管我的网站都使用小写的 URL。

【问题讨论】:

  • FWIW,bit.ly 将它们缩短为相同的 URL bit.ly/QeUCWg,因此他们显然首先对其进行解码。

标签: http url url-rewriting googlebot


【解决方案1】:

我不能以 100% 的权威谈论这个问题,但如果您停下来考虑如何将 URL 存储在搜索索引、URL 表或 Google 使用的任何无数数据存储中,我无法想象 URL 不会以某种方式进行规范化。

任何类型的规范化都应该将 URL 解码为字符串,因此应该没有区别。如果 Google 使用 % 编码存储 URL,我会感到惊讶。他们可以以 UTF-8 存储文本;百分号的存在是为了让事物对人类可见。

我猜,谷歌“使用”大写变体只是为了显示和报告目的。我认为根本不存储 URL 编码。

【讨论】:

  • 我不同意。 Url 没有以任何特定方式编码,因此它们可以是 UTF-8、latin-1 或其他任何形式。解码这些可能都会产生相同的“字符串”,但它们不是相同的 url。因为 url 没有给出字节的具体定义,所以它们实际上是不同的。但是,OP给出的示例是相同的:)
【解决方案2】:

由于它们应该是成对的十六进制字符,因此编码字符的小写和大写变体应该被认为是等效的(例如 0xab 和 0xAB 是相同的值)。

【讨论】:

    【解决方案3】:

    对于 Googlebot,很难预测它从哪里获取信息。即使您仅使用小写字母链接到它并且它在您的 XML 站点地图中以小写形式出现,也可能有人以大写形式链接到您的站点。

    您是正确的,Google 将 URL 视为区分大小写。这就是他们支持rel=canonical specification 的原因。如果您正确使用 rel=canonical 规范,我不会担心 Googlebot 正在访问全部大写的 URL。当他们处理页面以进行索引时,它会将所有页面“值”合并到规范 URL。

    如果您想更加明确,您可以 301 将所有大写请求重定向到小写版本。所以 Googlebot 会跟着 301 到小写版本。

    另外请注意,即使您有 301 和 rel=canonical ...您也会看到 Googlebot 将继续抓取全部大写的网址。即使这些 URL 是 404 或 410,也会发生这种情况。基本上,Googlebot 永远不会忘记一个 URL,并且它会不时尝试它知道曾经存在过的旧 URL,或者仍然有指向它的链接......即使他们'又老又远了。

    【讨论】:

      【解决方案4】:

      网址的百分比编码部分应规范化为相同的网址。这个维基百科页面应该会给你所有的答案;)

      http://en.wikipedia.org/wiki/URL_normalization

      【讨论】:

        猜你喜欢
        • 2011-10-14
        • 1970-01-01
        • 2011-05-16
        • 2016-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-21
        • 1970-01-01
        相关资源
        最近更新 更多