Azure cloudapp.net域和重复内容问题

时间:2013-05-20 17:44:08

标签: c# asp.net-mvc azure

我在Azure上托管了一个C#/ MVC4站点,作为位于http://www.equispot.com的Web角色。在Google上查看与我的网站相关的一些搜索时,我发现了一个链接到此页面的搜索结果:

http://equispot.cloudapp.net/horses-for-sale/quarter-horses/13

注意域名的区别。现在,我已经有了一个规范标签(在cloudapp.net链接上查看源代码,你可以看到规范的rel标签指向主站点http://www.equispot.com)。

既然如此,谷歌为什么要在cloudapp.net域上编入索引?我最近注意到我的SERP有所下降,我想知道这是否是原因的一部分(我在SERP更改的同时迁移到Azure)。它可能不相关但仍然......

如何防止这些网页被Google编入索引,或者如何阻止我的Azure网络角色响应除www.equispot.com和equispot.com之外的任何内容?当我在本地托管时,我只是将IIS配置为仅响应我的域名(我之前的提供商也出于某种原因制作了一些欺骗内容)。

2 个答案:

答案 0 :(得分:2)

您只需检查以确保运行该应用程序的主机是您想要的域名。如果不是,那么只需执行302重定向到您想要的域名。

您可以在多个地方检查请求并执行重定向:

 - Global.asax
 - Custom module
 - Override the OnActionExecuting for action methods

答案 1 :(得分:0)

我无法使用ServiceDefinition.csdef文件中的hostHeader配置找到一种直接的方法来执行此操作,因此我在自己的RedirectInvalidDomainsAttribute类中滚动执行301(永久移动)重定向到我的主站点请求无效域名。如果其他人遇到同样的问题,这里是代码:

<强> App_Start / FilterConfig.cs

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new RedirectInvalidDomainsAttribute());
}

<强> RedirectInvalidDomainsAttribute.cs

public class RedirectInvalidDomainsAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var url = filterContext.HttpContext.Request.Url;
        if (url == null) return;

        var host = url.Host;

        if (host.Contains("equispot.com") || host.Contains("localhost")) return;
        string subdomain = GetSubDomain(host);

        Guid guid;
        if (Guid.TryParseExact(subdomain, "N", out guid)) 
        {
            // this is a staging domain, it's okay
            return;
        }

        // Invalid domain - 301 redirect
        UriBuilder builder = new UriBuilder(url) {Host = "www.equispot.com"};
        filterContext.Result = new RedirectResult(builder.Uri.ToString(), true);

    }

    // This isn't perfect, but it works for the sub-domains Azure provides
    private static string GetSubDomain(string host)
    {
        if (host.Split('.').Length > 1)
        {
            int index = host.IndexOf(".");
            return host.Substring(0, index);
        }

         return null;
     }
}