我已经使用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的重写配置文件!
干杯
答案 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解决方案?如果我错了,请启发我。
的更多信息@pennylane:我正在努力做同样的事情,我想我明白了。
<强>情况:强>
快照名称=&#39; snapshot_ {page}&#39;其中{page} =页面名称
ex:&#39; http://example.com/snapshots/snapshot_contact.html&#39;
当我浏览快照时,快照显示状态代码为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>
最后在浏览器中输入以下网址:
&#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_