1

我有一个托管在 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的主站点)。

既然如此,为什么 Google 会在 cloudapp.net 域中索引该页面?我最近注意到我的 SERP 下降了,我想知道这是否是部分原因(我迁移到 Azure 的时间大约与 SERP 更改相同)。这可能无关紧要,但仍然...

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

4

2 回答 2

2

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

有几个地方可以检查请求并进行重定向:

 - Global.asax
 - Custom module
 - Override the OnActionExecuting for action methods
于 2013-05-20T18:19:11.243 回答
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;
     }
}
于 2013-05-21T14:19:02.540 回答