有没有办法在网站上始终要求或强制“www”子域名?

时间:2009-02-03 22:29:23

标签: iis iis-6 subdomain

我想阻止用户去说example.com并且只访问www.example.com,我们正在使用IIS 6.所以说他们去了example.com它可以在www.example.com上发布,等

这是一个设置在某处还是我必须对其进行编码以检查子域何时着陆并重定向?

编辑:我知道最好的方法是远离www前缀,但无论出于何种原因,如果用户启动课程(这是一个LMS)而没有URL中的www,跟踪不适用于.asmx文件,这就是为什么我试图强制'www',因为如果有人没有它,那么他们想知道为什么跟踪不起作用。

11 个答案:

答案 0 :(得分:6)

如果您正在使用ASP.NET创建一个HttpModule,请处理BeginRequest事件并在您的处理程序中添加此代码:

HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;

if (context.Request.Url.Host == "example.com")
{
context.Response.Clear();
context.Response.Status = "301 Moved Permanently";
context.Response.AddHeader("Location", "http://www.example.com" + context.Request.RawUrl);
}

请注意,我没有使用Response.Redirect(),这是为了SEO而完成的,因为Response.Redirect()总是返回状态302,这意味着对象被临时移动而状态301表示对象被移动永久性地,这将使您的页面的PageRank不会在www和非www版本之间划分(如果搜索引擎抓取工具可以使用www和非www URL访问页面,它们将在两者之间划分PageRank ,因此使用301,搜索引擎抓取工具了解并将您的PageRank仅保留到您网站的www版本。)

答案 1 :(得分:5)

由于两个记录都已指向正确的服务器......

...您可以在IIS中设置一个新网站(需要服务器版本)并让它仅响应example.com(主机标头设置)并将其重定向到所需的URL(检查重定向到url in主目录选项卡,然后输入www.example.com)。然后原始站点应该处理它(你可以设置它的主机头来回答www.example.com更具体)。

如果您无法在Web服务器上执行此操作,则您的发布防火墙应该能够,或者您可以考虑将其替换。您的DNS提供商也可能提供(不打算)重定向服务(基本上和我上面做的一样)。

答案 2 :(得分:4)

根据其他回复,安排301从未加修饰的域名重定向到具有www.前缀的网站。

鉴于我实际上在DNS行业工作,我想就www.辩论分享我的观点:

目前,至少,恕我直言,首选版网址应 www.前缀。 URL的主机名部分正好是它是主机名。您的浏览器将搜索的唯一DNS资源记录是A(并且可能是AAAA用于IPv6)记录,并且生成的IP地址是它将连接到的IP地址。

网站地址 - 只有完整的网址(http://前缀)指定此主机希望在端口80上接收HTTP连接。

首先www.前缀的全部原因是允许将不同协议分离到不同的主机。正如Verisign几年前(简要地)介绍他们的“SiteFinder”服务时所表明的那样,假设A记录的每个请求都是使用HTTP协议的,这是一个巨大的错误。

将您的网址的规范版本设为 www.前缀也可以简化Cookie处理,并且可以更轻松地将静态内容拆分到内容交付网络(如建议的那样)雅虎,谷歌等。)

现在,有一种DNS记录类型(SRV,请参阅RFC 2782),它使用服务和传输前缀来允许单个域名将不同的协议分派给不同的主机(因此也就是IP地址) )。

理想的DNS设置将是一条看起来像的记录:

_http._tcp.example.com IN SRV 10 0 80 www.example.com.

这表示所有通过TCP / IP的HTTP URI请求都应该发送到主机名 www.example.com上的TCP端口80。请注意,使用此语法,您还可以使HTTP服务自动从端口80以外的端口服务,而端口号不是URL的一部分。

SRV记录是SIP的必需部分,通常用于Jabber(XMPP)。但AFAIK没有浏览器使用它。 :(

答案 3 :(得分:0)

与您的主机(或您的域名注册商)联系,让他们将其设置为使用或不使用www。然而,如果您愿意,它应该以两种方式工作或仅以一种方式工作。我假设你有一个主机,并没有运行自己的网络服务器/域名注册,哈哈。

答案 4 :(得分:0)

无论你是否应该这样做,这都是如此。

这由DNS处理。通常,example.com和www.example.com将指向同一台服务器,但它们不必。如果没有明确注册www.example.com,那么请求将被发送到example.com服务器,该服务器将决定www.example.com的含义,以及mail.example.com,ftp.example .com,home.example.com,users.example.com等。

编辑:我意识到这个故事有点不完整,因为现在Apache获得了您过去使用的URL,它可能会解释该子域,并将请求定向到虚拟站点。但这不应该是“www”级别的因素。

答案 5 :(得分:0)

网站完成此操作的典型方法是从example.com执行HTTP重定向到www.example.com。您可以通过在用户转到example.com时返回HTTP状态代码301(永久重定向)或302(临时重定向),并在响应http://www.example.com中设置HTTP位置:字段来执行此操作。谷歌的“301对302”看你何时应该使用它们。

请注意,这是一项HTTP功能,而不是DNS提供的功能......但是,如果您使用名称服务器,某些域名提供商会为您提供HTTP重定向功能。

请注意,您可以自己测试一下。转到http://web-sniffer.net并输入yahoo.com(或microsoft.com或任何主要网站)。你会看到他们回复了一个名称的www版本的重定向(在不常见的情况下,一些网站采用另一种方式,将www重定向到名称的非www版本。)

答案 6 :(得分:0)

当我不幸在微软的网络堆栈上工作时,我使用ISAPI_Rewrite来强制使用www。前缀(除其他外)。

答案 7 :(得分:0)

在我的网站上,我只是将以下内容放入.htaccess文件中:

RewriteEngine on
RewriteBase /
RewriteCond   %{HTTP_HOST}   ^tafkas\.net$   [NC] 
RewriteRule   ^(.*)$  http://www.tafkas.net/$1   [L,R=301]

答案 8 :(得分:0)

对于基于Apache的服务器,您可以使用此代码

RewriteEngine On    
RewriteCond %{HTTP_HOST} !^www\.yourdomain\.com$ [NC]    
RewriteRule (.*) http://www.yourdomain.com/$1 [R=301,L]

说明:第一行只是打开重写引擎。第二行代码是检查用户输入的URL。 bash符号(!)表示不等于。胡萝卜符号(^)表示要检查的语句的开头。反斜杠点(。)是指dot的特殊字符,使用时不带反斜杠意味着“任何东西”。声明末尾的美元符号表示URL的结尾。第三个语句指出,如果用户给出的输入不是语句二中给出的输入,则按以下步骤操作。 (。*)表示任何事情和任何次数。这用于在yourdomain.com/存储在变量$ 1中之后保存用户编写的任何内容。 R = 301表示永久重定向,L表示这是状态码系列中的最后一个。

答案 9 :(得分:-3)

如上所述,添加WWW是相反的方向。 WWW现在是一种冗余。

您可以查看http://no-www.org/以获取更多信息。

答案 10 :(得分:-4)

这实际上是倒退了。这是他们1998年的表现,但现在你应该做任何事情drop the www

此外,example.com专门用于发布示例网址。实际上有人可能拥有并使用您提供的那个。你怎么知道你没有用随机的例子将某人指向色情或恶意软件网站?