我有一个名为
的天蓝网站http://myapp.cloudapp.net
当然,此网址有点丑陋,因此我set up a CNAME将http://www.myapp.com
指向天蓝色网址。
直到这里一直很好,但有一个障碍。
http://myapp.cloudapp.net
已泄露出来,现在已被谷歌编入索引并存在于其他网站上。
我想将myapp.cloudapp.net的任何请求永久重定向到新家www.myapp.com
我所拥有的网站是用MVC.Net 2.0编写的,因为这是一个天蓝色的应用程序,没有用于访问IIS的UI,所有内容都需要在应用程序代码或web.config中完成。
设置永久重定向的简洁方法是什么,如果它放在web.config或全局控制器中?
答案 0 :(得分:18)
您可能希望使用IIS重写模块(似乎“更干净”)。这是一篇博客文章,展示了如何执行此操作:http://weblogs.asp.net/owscott/archive/2009/11/30/iis-url-rewrite-redirect-multiple-domain-names-to-one.aspx。 (您只需要将相关标记放在web.config中。)
您可以使用的示例规则是:
<rule name="cloudexchange" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="cloudexchange.cloudapp.net" />
</conditions>
<action type="Redirect" url="http://odata.stackexchange.com/{R:0}" />
</rule>
答案 1 :(得分:5)
这就是我所做的:
我们有一个我们用于所有控制器的基本控制器类,我们现在覆盖:
protected override void OnActionExecuted(ActionExecutedContext filterContext) {
var host = filterContext.HttpContext.Request.Headers["Host"];
if (host != null && host.StartsWith("cloudexchange.cloudapp.net")) {
filterContext.Result = new RedirectPermanentResult("http://odata.stackexchange.com" + filterContext.HttpContext.Request.RawUrl);
} else
{
base.OnActionExecuted(filterContext);
}
}
并添加了以下课程:
namespace StackExchange.DataExplorer.Helpers
{
public class RedirectPermanentResult : ActionResult {
public RedirectPermanentResult(string url) {
if (String.IsNullOrEmpty(url)) {
throw new ArgumentException("url should not be empty");
}
Url = url;
}
public string Url {
get;
private set;
}
public override void ExecuteResult(ControllerContext context) {
if (context == null) {
throw new ArgumentNullException("context");
}
if (context.IsChildAction) {
throw new InvalidOperationException("You can not redirect in child actions");
}
string destinationUrl = UrlHelper.GenerateContentUrl(Url, context.HttpContext);
context.Controller.TempData.Keep();
context.HttpContext.Response.RedirectPermanent(destinationUrl, false /* endResponse */);
}
}
}
原因是我想要永久重定向(不是临时重定向),所以搜索引擎会纠正所有不良链接。