Google Ajax Crawlable Rewrite !!? _escaped_fragment_ =

时间:2011-10-03 10:53:42

标签: asp.net ajax hash

我已经使用hash bang

启动了ajax站点路径

目前我的网址看起来像:

http://www.domain.com/#!/index
http://www.domain.com/#!/studio
http://www.domain.com/#!/about

阅读谷歌的文档:http://code.google.com/web/ajaxcrawling/

看起来谷歌会尝试重写http://www.domain.com/#!/工作室

http://www.domain.com/?_escaped_fragment_=studio

我想知道如何获得IIS7重写规则以将转义的片段重定向到:

http://www.domain.com/studio即获取查询字符串arg并将其映射回根

该网站使用umbraco在asp.net中完成,所以我也可以访问umbraco的重写配置文件!

干杯

2 个答案:

答案 0 :(得分:6)

@Giberno:你似乎不明白pennylane在问什么。

pennylane尝试通过IIS / web.config重定向的全部原因是搜索引擎机器人被重定向到静态预生成的.htm / .html文件。

下一代机器人,比如googlebot,可以识别出一个混乱。

 hashbang = '#!' in 'http://example.com/#!/some/page/with/ajax/content'

当机器人在网址中检测到此 hashbang 时,它会将网址转换为_escaped_fragment_查询字符串网址。

上面的示例将转换为:

'http://example.com/?_escaped_fragment_=/some/page/with/ajax/content'

这是因为机器人无法执行javascrip。然而你提供了一个JavaScript解决方案?如果我错了,请启发我。

有关AJAX Applications and SEO

的更多信息

@pennylane:我正在努力做同样的事情,我想我明白了。

<强>情况:

当我浏览快照时,快照显示状态代码为200 OK。

我为web.config文件放置了以下重写规则:

<configuration>
    <system.webServer>
        <rewrite>
            <rules>

                ... other rewrite rules ...

                <rule name="EscapedFragment" stopProcessing="true">
                    <match url="(.*)"/>
                    <conditions>
                        <add input="{QUERY_STRING}" pattern="_escaped_fragment_=/([_0-9a-zA-Z-]+)" />
                    </conditions>
                    <action type="Rewrite" url="snapshots/snapshot_{C:1}.html" appendQueryString="false" />
                </rule>  

                ... other rewrite rules ...

            </rules>
        </rewrite>

        ... other configs ...

    </system.webServer>
</configuration>

重定向规则耗尽:

匹配度:

<match url="(.*)"/>

在任何网址上调用该规则。

条件:

<add input="{QUERY_STRING}" pattern="_escaped_fragment_=/([_0-9a-zA-Z-]+)" />

如果&#39; _escaped_fragment _ = /&#39;后跟一个alphanumiriq字符串,带或不带套接字符,下划线(_)或连字符( - )......

重写行动:

<action type="Rewrite" url="snapshots/snapshot_{C:1}.html" appendQueryString="false" />

重写到网址而不附加查询字符串。

其中{C:1} =&#39; _escaped_fragment _&#39;查询字符串参数

信息来源: 我根据以下信息构建了这个重写规则:

结果:

浏览:

'http://example.com/?_escaped_fragment_=/test'

应重写为:

GET 'http://example.com/snapshots/snapshot_test.html'

测试模式{C:1} =&#39;测试&#39;。

<强>测试

在我看来,测试重写规则是否有效的最简单方法是遵循以下步骤:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>URL Rewrite Module Test</title>
</head>
<body>
      <h1>URL Rewrite Module Test Page</h1>
      <table>
            <tr>
                  <th>Server Variable</th>
                  <th>Value</th>
            </tr>
            <tr>
                  <td>Original URL: </td>
                  <td><%= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td>
            </tr>
            <tr>
                  <td>Final URL: </td>
                  <td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
            </tr>
      </table>
</body>
</html>
  • 在包含上述代码的同一目录下创建snapshot_test.aspx文件。
  • 将重写规则更改为重写为.aspx文件而不是.html文件
  • 最后在浏览器中输入以下网址:

    &#39; http://example.com/?_escaped_fragment_=/test&#39;

<强> For more info on IIS rewrite testing

此外:

使用规范网址和sitemap.xml的漂亮网址。

Pretty url: 'http://example.com/#!/test'
Ugly url: 'http://example.com/?_escaped_fragment_=/test'

答案 1 :(得分:0)

尝试:

javascript代码:

var hashchange;
function MyHash() {
    if(window.location.hash) {
       MyHash = window.location.hash.replace("#!/", "");
        $.get("process_page.asp?_escaped_fragment_=" + MyHash, function(data) {
            $("#content").html(data);
        });
    }
}
$(document).ready(function() {
    hashchange();
});

$(window).bind('hashchange', function() {
    hashchange();
});

HTML code:

<div id="content"><!--#include file="process_page.asp"--></div>

并在process_page.asp中:

GET _escaped_fragment_

执行某些操作

您还可以参考:http://www.gingerhost.com/ajax-demo/

顺便说一句:我不擅长asp。我的主要语言是php。但我做了上面的代码,不需要重写URL