4

我想阻止用户说 example.com 而只去 www.example.com,我们使用的是 IIS 6。所以说他们去 example.com 它可以附加 www.example.com 等。

这是某个地方的设置,还是我必须对其进行编码以在子域登陆并相应地重定向时检查它们?

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

4

11 回答 11

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 网址访问页面,他们会将您的 PageRank 在两者之间划分,因此是使用 301 搜索引擎爬虫可以理解并将您的 PageRank 仅保留为您网站的 www 版本)。

于 2009-02-04T09:20:21.400 回答
5

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

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

如果您不能在 Web 服务器上执行此操作,您的发布防火墙应该可以,或者您可以考虑更换它。您的 DNS 提供商还可能提供(双关语不是有意的)重定向服务(我猜对您而言与上述基本相同)。

于 2009-02-03T23:02:15.173 回答
4

根据其他响应,安排从原始域名到带有www.前缀的站点的 301 重定向。

鉴于我实际上在 DNS 行业工作,我想分享我对www.辩论的看法:

现在,至少,恕我直言,首选版本的 URL 应该带有前缀www.。URL 的主机名部分就是这样,它是一个主机名。您的浏览器将搜索的唯一 DNS 资源记录是A(并且可能AAAA是 IPv6)记录,而生成的 IP 地址就是它将连接到的 IP 地址。

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

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

将 URL 的规范版本设置为带有前缀的URLwww.也使 cookie 处理更容易,并允许更轻松地将静态内容拆分到内容交付网络(如 Yahoo!、Google 等所推荐的那样)。

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

理想的 DNS 设置是如下所示的记录:

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

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

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

于 2009-02-03T23:55:35.643 回答
0

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

于 2009-02-03T22:32:11.817 回答
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”级别的一个因素。

于 2009-02-03T22:41:21.533 回答
0

网站完成此操作的典型方式是从 example.com 到 www.example.com 的 HTTP 重定向。您可以在用户访问 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 版本)。

于 2009-02-03T22:59:41.200 回答
0

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

于 2009-02-03T23:02:45.407 回答
0

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

RewriteEngine on
RewriteBase /
RewriteCond   %{HTTP_HOST}   ^tafkas\.net$   [NC] 
RewriteRule   ^(.*)$  http://www.tafkas.net/$1   [L,R=301]
于 2009-02-03T23:58:56.633 回答
0

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

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

Explanation: The first line just turns the rewrite engine on. The second line of code is to check the url entered by the user. The bash sign (!) means not equal to. The carrot sign (^) means the beginning of the statement to be checked. Backslash dot (.) refers to the special character of dot, which when used without backslash means 'anything'. The dollar sign at the end of the statement refers to the end of the url. The third statement states that if the input given by the users is not the one as given in statement two, then proceed as follows. (.*) means that anything and any number of times. This is used so as the save anything written by the user after yourdomain.com/ gets stored in the variable $1. R=301 refers to the permanent redirection, and L states that this is the last in the series of status codes.

于 2014-11-29T18:16:04.550 回答
-3

如前所述,添加 WWW 是相反的方向。如今,万维网是一种冗余。

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

于 2009-02-03T22:36:28.687 回答
-4

这实际上是倒退。这就是他们在 1998 年的做法,但现在如果有任何东西,你应该放弃 www

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

于 2009-02-03T22:32:05.077 回答