URL字符串中的URLRewriteFile和“#”字符

时间:2012-03-16 01:12:30

标签: gwt url-rewriting

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

我想我会添加一个基于用户代理的网址过滤器来映射表格的所有网址

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字符串似乎在&#34;#&#34;处被截断。

任何人都可以告诉我是否可以使这项工作。

1 个答案:

答案 0 :(得分:0)

正如您所发现的,浏览器不会将哈希值发送到服务器。观察一个给定的请求,你会发现它只在#符号前面的URL发送。

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

从你提到的链接:

  

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

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

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