我在这里关注代码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的情况
答案 0 :(得分:1)
我建议处理这个问题的最佳方法是在dns记录中,如果你有控制权的话。
答案 1 :(得分:0)
如果您不知道提前的值是什么,可以使用带有indexof的子字符串作为Url路径来解析所需的值并替换它。
如果你事先知道它是什么,你可以随时做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);
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