ASP.NET 站点重定向帮助

本文关键字:帮助 重定向 站点 NET ASP | 更新日期: 2023-09-27 17:56:02

我在这里按照代码 https://web.archive.org/web/20211020203216/https://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 的情况

ASP.NET 站点重定向帮助

我建议处理此问题的最佳方法是在dns记录中,如果您可以控制它的话。

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

  2. 如果你提前知道它是什么,你总是可以做 Request.Url.PathAndQuery.Replace("abc", "www");

您还可以在解析所需内容后按照@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);

附言我不记得 Request.Url.Scheme 中是否已经包含"://",因此您需要相应地进行编辑。

我认为如果不访问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:如何将非 www 重定向到 www,反之亦然