我正在完成一个新的移动网站来赞美桌面版。目前我在桌面网站上的web.config文件中有一个重写规则,如下所示:
<system.webServer>
<rewrite>
<rules>
<rule name="MobileRedirect" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".*" ignoreCase="true" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_COOKIE}" pattern="nomobile" ignoreCase="true" negate="true" />
<add input="{HTTP_USER_AGENT}" pattern="android|blackberry|googlebot-mobile|iemobile|iphone|ipod|opera mobile|palmos|webos" />
</conditions>
<action type="Redirect" url="http://m.mysite.com" appendQueryString="false" redirectType="Found" />
</rule>
</rules>
</rewrite>
如果我从不希望用户在移动设备上使用桌面网站,这种方法非常有效,但情况并非总是如此。移动网站上的某些链接会链接回桌面版本。我在移动网站的页脚上有一个链接,以“查看完整网站”。
所以我的问题是:如何正确处理该链接上的cookie设置,然后在web.config中检测并且不重定向到移动版本,如果它存在....我在web.config中进行了条件检查http_cookie“nomobile”,但我认为它没有正常工作。我是否只是从移动设备发送一个查询字符串值并检查global.asax文件中的那个或者是否因为web.config首先运行而无效?
桌面是IIS 7.5上的C#MVC4站点,如果有任何帮助,那么移动站点就是一个简单的jquery移动站点。
谢谢!
修改 我已经尝试检查global.asax文件中的查询字符串(下面的代码),但似乎“请求在此上下文中不可用”。
// create and set cookie if ?nomobile detected
string forcedesktop = HttpContext.Current.Request["nomobile"];
if(forcedesktop != null){
HttpCookie nomobile = new HttpCookie("nomobile");
Request.Cookies.Add(nomobile);
}
}