在web.config中重写以在移动和桌面站点之间进行

时间:2013-09-12 13:00:30

标签: mobile web-config rewrite iis-7.5 httpcookie

我正在完成一个新的移动网站来赞美桌面版。目前我在桌面网站上的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);
            }
        }

0 个答案:

没有答案