【问题标题】:URLRewriteFile and "#" char in URL stringURL 字符串中的 URLRewriteFile 和“#”字符
【发布时间】:2012-03-16 11:50:38
【问题描述】:

我正在使用 Google 方法使我的 GWT 应用程序可搜索 (https://developers.google.com/webmasters/ajax-crawling/docs/getting-started),效果很好。不幸的是,Bing 似乎没有遵循相同的模式/规则。

我想我会添加一个 URL 过滤器,基于用户代理来映射表单的所有 URL

http://www.example.com/#!blah=something

http://www.example.com/?_escaped_fragment_=blah=something

仅适用于 BingBot,以便我的 CrawlerServet 返回与 GoogleBot 请求相同的内容。我有一个 URLRewrite 规则,例如:

<rule>
  <condition name="user-agent">Firefox/8.0</condition>
  <from use-query-string="true">^(.*)#!(.*)$</from>
  <to type="redirect">?_escaped_fragment_=$2</to>
</rule>

(我正在使用 Firefox 的用户代理进行测试)

这永远不会匹配。如果我将规则更改为 ^(.)!(.)$ 并尝试匹配

http://www.example.com/!blah=something

它会起作用,但使用相同的规则

http://www.example.com/#!blah=something

不起作用,因为过滤器使用的 URL 字符串似乎在“#”处被截断。

谁能告诉我这是否可行。

【问题讨论】:

    标签: gwt url-rewriting


    【解决方案1】:

    正如您所发现的,浏览器不会将哈希发送到服务器。查看给定的请求,您会发现它只在 # 符号之前发送 URL。

    GET / HTTP/1.1
    Host: example.com
    ...
    

    从你提到的链接:

    哈希片段永远不会(按照规范)作为 HTTP 请求的一部分发送到服务器。换句话说,爬虫需要某种方式让您的服务器知道它想要 URL www.example.com/ajax.html#!key=value 的内容(而不是简单的 www.example.com/ajax.html )。

    从文本中的描述来看,服务器的工作是从“丑陋”的 url 转换为漂亮的(带有哈希),并发送回该页面的快照,如果加载了在客户端上散列。该页面可能有其他链接使用哈希加载其他文档 - 爬虫将自动将这些链接转换回丑陋的 url,并从服务器请求更多数据。

    因此,简而言之,这不是您应该做出的改变,只要您选择使用哈希片段,GoogleBot 就会自动做出改变。至于其他机器人,显然 Bing 现在也支持这个想法,但这似乎超出了您的问题范围。

    【讨论】:

    • 我刚刚在 Bing 上找到了设置。在他们的网站管理员工具 Crawl -> Crawl Settings -> SITE SUPPORTS AJAX CRAWLABLE URLs 中,所以我原来的问题是无关紧要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    相关资源
    最近更新 更多