首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Windows Azure的http重定向的最佳实践

Windows Azure的http重定向的最佳实践
EN

Stack Overflow用户
提问于 2010-06-21 10:26:49
回答 2查看 10.8K关注 0票数 16

我有一个azure网站,名为:

  • http://myapp.cloudapp.net

当然,这个url有点难看,所以我通过set up a CNAMEhttp://www.myapp.com指向了天蓝色的URL。

到这里为止一切都很好,但有一个障碍。

http://myapp.cloudapp.net已经泄露出去,现在被谷歌索引,并生活在其他网站上。

我想永久地将任何针对myapp.cloudapp.net的请求重定向到位于www.myapp.com的新主页

我的网站是用IIS2.0编写的,因为这是一个MVC.Net应用程序,没有UI来访问IIS2.0,所有的事情都需要在应用程序代码或web.config中完成。

设置永久重定向的干净方法是什么?应该放在web.config中还是放在全局控制器中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-21 12:37:56

您可能希望改用IIS重写模块(看起来“更干净”)。这里有一篇博客文章展示了如何做到这一点:http://weblogs.asp.net/owscott/archive/2009/11/30/iis-url-rewrite-redirect-multiple-domain-names-to-one.aspx。(您只需要将相关的标记放在web.config中。)

您可以使用的一个示例规则是:

代码语言:javascript
复制
    <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>
票数 18
EN

Stack Overflow用户

发布于 2010-06-21 12:12:17

这是我所做的:

我们有一个用于所有控制器的基本控制器类,我们现在重写:

代码语言:javascript
复制
 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);
        }
    }

并添加了以下类:

代码语言:javascript
复制
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 */);
        }

    }
}

原因是我想要一个永久的重定向(而不是临时的),这样搜索引擎就可以纠正所有的坏链接。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3081796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档