如何在 Ubuntu 14.04 上使用 Apache 将 www 重定向到非 www

介绍

当你有你的网站或应用程序运行在一个域后面,它往往是可取的,以允许你的用户访问它通过简单的域名 and www子域名. 也就是说,他们应该能够访问你的域名与或没有www.前缀,例如example.comwww.example.com,在一个网页浏览器,并呈现与相同的内容。 虽然有各种方式来设置这个,最好的解决方案,对于一致性和SEO考虑,是选择你喜欢的域名,普通或www,并重定向另一个偏好的域名。 这种类型的重定向被称为一个 永久重定向,或301重定向,可以很容易地通过正确配置你的DNS资源和Web服务器软件。

本教程将向您展示如何将 www URL 重定向到非 www,例如 www.example.comexample.com,在 Ubuntu 14.04 上使用 Apache。

如果您想使用 Nginx 作为您的 Web 服务器执行此类重定向,您应该遵循本教程: 如何在 Ubuntu 14.04 上使用 Nginx 重定向 www 到非 www

前提条件

本教程假定您在运行 Apache 的服务器上有超级用户权限,即sudo或 root。

假设您已安装了 Apache. 如果您尚未安装此设置,则在 Apache 标签下提供有关该主题的几个教程。

如果您还没有域名,您可以从域名注册商那里购买一个域名,并使用注册商的 DNS 或 DigitalOcean’s DNS来管理它。

让我们从配置您的DNS记录开始。

配置 DNS 记录

为了设置所需的重定向,‘www.example.com’ 到‘example.com’ 或 vice versa,您必须为每个名称设置一个 **A 记录。

打开您使用的任何东西来管理您的 DNS. 对于我们的例子,我们将使用 DigitalOcean DNS

如果域(也称为区域)记录尚不存在,请现在创建一个域名。 hostname应该是您的域名,例如 example.com,并且 IP 地址应该设置为您的 Apache 服务器的公共 IP 地址。

接下来,添加另一个 A 记录以www作为主机名称(或www.example.com如果部分子域不起作用),并指定相同的 IP 地址。

当您创建两个记录时,它应该看起来像这样的东西:

Required A records

<$>[注] 注: 此功能也适用于 CNAME 记录,只要该名称的 A 记录指的是您的 Apache 网页服务器的 IP 地址。

现在您的服务器应该可以通过 www 和非 www 域访问,但我们仍然需要设置重定向。

允许重写模块

为了执行 301 重定向,我们将使用 Apache mod_rewrite,或 Rewrite,模块. 这样做将确保您的用户可以访问您的网站有或没有前缀 www.,并被重定向到您喜欢的域。

首先,使用此命令启用mod_rewrite模块:

1sudo a2enmod rewrite

通过启用 Rewrite 模块,我们可以使用 .htaccess 文件来配置 Apache 的重定向规则。

启用.htaccess 文件

在 Ubuntu 上,默认配置文件位于 /etc/apache2/sites-enabled/000-default.conf,所以我们将在我们的示例中使用:

1sudo vi /etc/apache2/sites-enabled/000-default.conf

默认情况下,它是 /var/www/html,所以我们将在我们的示例配置中使用它。

将下列目录指令添加到配置中,并确保为突出部分代替 DocumentRoot:

1[label Add to Apache configuration]
2 <Directory /var/www/html>
3    Options Indexes FollowSymLinks MultiViews
4    AllowOverride All
5    Order allow,deny
6    allow from all
7 </Directory>

保存和退出。

现在重新启动 Apache 以实现更改:

1sudo service apache2 restart

现在Apache已配置为读取位于/var/www/html目录下任何地方的.htaccess文件。

配置重写模块

如前所述,我们将使用.htaccess 文件配置 Rewrite 模块。

更改您的 DocumentRoot 目录,在我们的情况下, /var/www/html:

1cd /var/www/html

现在打开.htaccess来编辑:

1sudo vi .htaccess

当然,如果您之前没有创建该文件,它将是空的. 根据您想要重定向的方向,使用下列选项之一。

选项1:将 www 重定向到非 www

如果您想将用户从 www 重定向到普通的非 www 域,请插入此配置:

1[label .htaccess — www to non-www]
2RewriteEngine On
3RewriteBase /
4RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
5RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

请注意,如果您正在使用 HTTPS,您应该更新http,在RewriteRule行,到https

使用此 curl 命令,确保非 www 域重定向到 www 域(以您的实际域代替突出部分):

1curl -I http://www.example.com

您应该得到一个301移动永久的响应,显示非www重定向位置,如下:

1[secondary_label Output:]
2HTTP/1.1 301 Moved Permanently
3Date: Fri, 01 May 2015 21:18:33 GMT
4Server: Apache/2.4.7 (Ubuntu)
5Location: http://example.com/
6Content-Type: text/html; charset=iso-8859-1

当然,您应该在网页浏览器(www和非www)中访问您的域名,以确保。

选项 2: 重定向非 www 到 www

如果您想将用户从普通的非 www 域转移到 www 域,请插入此配置:

1[label .htaccess — non-www to www]
2RewriteEngine On
3RewriteBase /
4RewriteCond %{HTTP_HOST} !^www\. [NC]
5RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

请注意,如果您正在使用 HTTPS,您应该更新http,在RewriteRule行,到https

使用此 curl 命令,确保非 www 域重定向到 www 域(以您的实际域代替突出部分):

1curl -I http://example.com

您应该得到一个301移动永久的响应,显示 www 重定向位置,如下:

1[secondary_label Output:]
2HTTP/1.1 301 Moved Permanently
3Date: Fri, 01 May 2015 21:18:33 GMT
4Server: Apache/2.4.7 (Ubuntu)
5Location: http://www.example.com/
6Content-Type: text/html; charset=iso-8859-1

当然,您应该在网页浏览器(www和非www)中访问您的域名,以确保。

结论

你的Apache重定向现在已正确配置,你的用户将能够通过你的非www和www域访问你的Web服务器。

如果您想了解更多关于 mod_rewrite,我们使用的Apache功能来实现重定向,请自由阅读本教程: 如何设置Mod_rewrite

Published At
Categories with 技术
Tagged with
comments powered by Disqus