Gwt URLEwritefile和"#&引用;URL字符串中的字符

Gwt URLEwritefile和"#&引用;URL字符串中的字符,gwt,url-rewriting,Gwt,Url Rewriting,我正在使用谷歌的方式让我的GWT应用程序可以搜索(https://developers.google.com/webmasters/ajax-crawling/docs/getting-started),效果很好。不幸的是,Bing似乎没有遵循相同的模式/规则 我想我应该添加一个基于用户代理的URL过滤器来映射表单的所有URL http://www.example.com/#!blah=something 到 仅针对BingBot,因此我的CrawlerServet返回的结果与GoogleBo

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

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

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

仅针对BingBot,因此我的CrawlerServet返回的结果与GoogleBot请求的结果相同。我有一个URL重写规则,如:

<rule>
  <condition name="user-agent">Firefox/8.0</condition>
  <from use-query-string="true">^(.*)#!(.*)$</from>
  <to type="redirect">?_escaped_fragment_=$2</to>
</rule>
它会起作用,但使用相同的规则

http://www.example.com/#!blah=something
将不起作用,因为筛选器使用的URL字符串似乎在“#”处被截断


有人能告诉我这是否可行。

正如您所发现的,浏览器不会将哈希发送到服务器。观察给定的请求,您将看到它只沿#符号前面的url发送

从您提到的链接:

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

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


因此,简而言之,这不是您需要做的更改,只要您选择使用散列片段,谷歌机器人将自动进行更改。至于其他机器人,显然Bing现在也支持这个想法,但这似乎超出了你的问题范围。

我刚刚在Bing上找到了设置。在他们的网站管理员工具中,爬行->爬行设置->站点支持AJAX可爬行URL,所以我最初的问题与此无关。
http://www.example.com/!blah=something
http://www.example.com/#!blah=something
GET / HTTP/1.1
Host: example.com
...