2011-07-12 67 views
10

我最近发现有其他域名指向我的网站(这不属于我),我想知道人们如何阻止/防止这种情况发生。我在peer1上使用IIS托管这个,我正在使用ASP.NET C#。如何阻止其他域名指向我的域名?

我可以使用HttpModule或其他代码来拒绝不是我的域名吗?

有没有更好的方法?

+0

您的网站不控制哪些DNS记录指向您的服务器的IP地址。 – zellio

+1

但是你不能找出请求来自哪里的域名吗?如果你能发现,你可以重定向到另一个页面。不要一些网站这样做,以防止热链接? –

+0

您能否更新有关您的托管环境的详细信息?您是自己托管此网站,还是托管公司?什么是Web服务器(猜测IIS)并且您是否具有管理访问权限? –

回答

5

您应该激活基于名称的虚拟主机,并只显示您想要的域名的真实网站。对于所有其他名称,您可以显示合适的错误消息。

详情:您的网络服务器与其IP地址联系。没有什么可以阻止的。任何人都可以说,“连接到该IP地址”。例如,任何人都可以注册新的域名来指向您的服务器的IP地址。但是,在请求中,有一个字段,其​​名称为www.example.com

收到请求后,您的服务器可能会选择检查Host字段并根据该值提供不同的内容。在最简单的情况下,服务器完全忽略该字段并始终打印出相同的内容。但是在更复杂的设置中,所谓的“基于名称的(虚拟)托管”,服务器根据主机名选择内容。

这就是共享网络主机的工作方式:有一台服务器,但根据请求的主机名,它会为每个名称分配一个不同的网站。

因此,如果您想将您的服务器内容绑定到您的主机名,您必须告诉您的服务器仅为您想要的名称生成您的网站,并为其他所有情况生成不同的(错误)网站。

在Apache中,这是很简单的配置,只需检查他们的文档;对于IIS我不知道,但我想这同样简单。

+0

你能解释一下吗?我有点迷失在如何执行你在iis中问的问题。 – locoboy

+0

@cfarm:我添加了一些信息 –

+0

@Kerrek,在IIS中指定主机头怎么样? (保持简单) –

3

如果您的主机环境是IIS并且您有管理员访问权限。将您的默认网站设置为显示错误页面,然后创建一个新的网站,使主机标题与您的网域匹配指向您的网站。

0

如果我在上次检查我的网站cpanel时记得正确,我看到一个功能可以在检查时停止对我的域的重定向。我使用Hostso作为我的主机,因此请检查它们的测试cpanel。

希望它帮助小有一点ATLEAST :)

弗雷德里克·沃斯

1

作为一个临时的解决办法,你可以做到这一点。可能在主页加载或BeginRequest。

if(!Request.Url.Host.ToLower().contains("mysite.com")){ 
    Response.Redirect("error.html"); 
} 
0
如果你想在代码来处理

那么做,在Global.asax中的的BeginRequest如下

void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if (!context.Request.Url.Host.ToLower().Equals("www.mydomain.com")) 
    { 
     context.Rewritepath("/invalidpage.aspx"); 
    } 
} 

另一个简单的方法是指定在IIS中的主机头为您的网站。

http://technet.microsoft.com/en-us/library/cc753195(v=ws.10).aspx 注:我写这封信通过我的手机这么考虑的拼写错误

+1

主机名可能不包含“www” –

+0

是的,你说得对,我只是建议我的代码可能没有完全实现。 –

1

在IIS中有一个叫bindings设置,允许您选择哪个主机名您的网站将作出回应。此功能允许IIS的一个实例在单个IP地址上托管多个网站。

如果您希望自己的网站只适用于http://example.com/http://www.example.com/,则应将绑定设置为仅适用于“example.com”和“www.example.com”。

这里的例外是如果您使用SSL。如果是这样,IIS无法确定主机名,您很可能必须为您的站点使用专用IP地址。在这种情况下,user608576的解决方案将工作。虽然,我会将该代码放入您的Global.asax文件中:

<%@ Application Language="C#" %> 
<script runat="server"> 
void Application_BeginRequest(Object sender, EventArgs args) 
{ 
    HttpRequest request = HttpContext.Current.Request; 
    HttpResponse response = HttpContext.Current.Response; 

    if((request.Url.Host != "example.com") && (request.Url.Host != "www.example.com")) 
    { 
     response.Clear(); 
     response.Write("Unauthorized domain name: " + request.Url.Host); 
     response.End(); 
    } 
} 
</script> 
2

这是我的解决方案。它真的工作得很快,解决了我的问题。

插入这段代码在你的.htacces

RewriteCond %{HTTP_HOST} !^www.higueyrd.com$ 
RewriteRule ^/?(.*) http://www.higueyrd.com/$1 [QSA,R=301,L] 

只要把你的域名。