我在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配置为仅响应我的域名(我之前的提供商也出于某种原因制作了一些欺骗内容)。
答案 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;
}
}