ASP.NET站点重定向帮助

时间:2011-05-11 18:55:17

标签: c# asp.net

我在这里关注代码http://www.4guysfromrolla.com/articles/072810-1.aspx

http://somesite.com重定向到http://www.somesite.com

protected void Application_BeginRequest(object sender, EventArgs e)
{
   if (Request.Url.Authority.StartsWith("www"))
      return;

   var url = string.Format("{0}://www.{1}{2}",
               Request.Url.Scheme,
               Request.Url.Authority,
               Request.Url.PathAndQuery);

   Response.RedirectPermanent(url, true);
}

如何使用此代码处理http://abc.somesite.com应重定向到www.somesite.com的情况

3 个答案:

答案 0 :(得分:1)

我建议处理这个问题的最佳方法是在dns记录中,如果你有控制权的话。

答案 1 :(得分:0)

  1. 如果您不知道提前的值是什么,可以使用带有indexof的子字符串作为Url路径来解析所需的值并替换它。

  2. 如果你事先知道它是什么,你可以随时做Request.Url.PathAndQuery.Replace(“abc”,“www”);

  3. 你可以在解析了你需要确保你没有犯错之后的@aceinthehole建议进行dns检查。

    假设您有一个像http://abc.site.com这样的字符串,并且您想将abc转换为www,那么您可以执行类似的操作。

    string pieceToReplace = Request.Url.PathAndQuery.substring(0, Request.Url.PathAndQuery.IndexOf(".") + 1);
    
    //here I use the scheme and entire url to make sure we don't accidentally replace an "abc" that belongs later in the url like in a word "GHEabc.com" or something.
    string newUrl = Request.Url.ToString().Replace(Request.Url.Scheme + "://" + pieceToReplace, Request.Url.Scheme + "://www");
    
    Response.Redirect(newUrl);
    

    P.S。我不记得Request.Url.Scheme中是否已经包含“://”,因此您需要进行相应的编辑。

答案 2 :(得分:0)

如果没有DNS访问权限,我认为你无法做到这一点。听起来你需要一个通配符DNS条目:

http://en.wikipedia.org/wiki/Wildcard_DNS_record

配置没有主机头的IIS(仅限IP)。然后你可以使用类似上面的代码来做你想做的事。

if (!Request.Url.Host.StartsWith ("www") && !Request.Url.IsLoopback)
  Response.Redirect('www.somesite.com');

也许收紧一些以防止wwww.somesite.com通过。任何以www开头的内容都包括wwwmonkeys.somesite.com,都会通过上述检查。这只是一个例子。

asp.net mvc: How to redirect a non www to www and vice versa