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

介绍

当你有你的网站或应用程序启动和运行一个域的背后,则是经常需要还允许用户通过简单的域名访问到它,并WWW子域名。也就是说,他们应该可以使用或不使用“ www. ”前缀访问您的域名,例如,example.com或者www.example.com在Web浏览器中,并显示相同的内容。虽然有多种方法可以设置,但为了保持一致性和搜索引擎优化考虑,最佳解决方案是选择您喜欢的域名,简单或www,并将另一个域重定向到首选域。此类重定向称为永久重定向或“301重定向”,可以通过正确配置DNS资源记录和Web服务器软件轻松设置。

本教程将告诉你如何在WWW URL重定向到非www,例如,www.example.comexample.com在Ubuntu 14.04,与Apache。我们还将向您展示如何从另一个方向重定向,从非www URL到www。

准备

一台已经设置好可以使用sudo命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

假设您已安装Apache。

您必须能够将记录添加到管理域的DNS中。如果您还没有域名,可以从域名注册商处购买域名,并使用注册商的DNS进行管理。在本教程中,我们将使用腾讯云DNS创建必要的记录。

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

配置DNS记录

为了建立所需的重定向,www.example.comexample.com,反之亦然,你必须有一个A记录的每个名字。

打开用于管理DNS的任何内容。对于我们的示例,我们将使用腾讯云DNS。

如果域(也称为区域)记录尚不存在,请立即创建一个。该主机名应该是你的域名,例如example.com,与IP地址应设置为您的Apache服务器的公网IP地址。这将自动创建一个A记录,将您的域指向您指定的IP地址。如果您使用其他系统来管理域,则可能需要手动添加。

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

当您创建了两个记录时,它应该如下所示:

注意:只要规范名称的A记录引用Apache Web服务器的IP地址,这也适用于CNAME记录。

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

启用重写模块

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

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

sudo a2enmod rewrite

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

启用.htaccess文件

打开Apache配置文件以进行编辑。在Ubuntu上,默认配置文件位于/etc/apache2/sites-enabled/000-default.conf,所以我们将在我们的示例中使用它:

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

找到您网站的DocumentRoot,并记下它。默认情况下,它是/var/www/html,所以我们将在我们的示例配置中使用它。

将以下Directory指令添加到配置中,并确保将DocumentRoot替换为突出显示的部分:

 <Directory /var/www/html>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
 </Directory>

保存并退出。

现在重新启动Apache以使更改生效:

sudo service apache2 restart

现在,Apache配置为读取位于/var/www/html目录下任何位置的.htaccess文件。我们现在添加我们的重写规则。

配置重写模块

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

在我们的示例中,将目录更改为DocumentRoot /var/www/html

cd /var/www/html

现在打开.htaccess进行编辑:

sudo vi .htaccess

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

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

如果要将用户从www重定向到普通的非www域,请插入以下配置:

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

保存并退出。这些变化应立即生效。请注意,如果您使用的是HTTPS,则应将该RewriteRule行中的“http”更新为“https”。

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

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

您应该得到一个301 Moved Permanently响应,显示非www重定向位置,如下所示:

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

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

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

如果要将用户从普通的非www域重定向到www域,请插入以下配置:

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

保存并退出。变更应立即生效。请注意,如果您使用的是HTTPS,则应将该RewriteRule行中的“http”更新为“https”。

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

curl -I http://example.com

您应该得到一个301 Moved Permanently响应,显示www重定向位置,如下所示:

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

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

结论

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

更多Ubuntu教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Redirect www to Non-www with Apache on Ubuntu 14.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在一个Ubuntu 16.04服务器上将Nginx配置为Web服务器和Apache的反向代理

Apache和Nginx是两种常用的PHP开源Web服务器。当托管具有不同要求的多个网站时,在同一虚拟机上运行它们会很有用。在单个系统上运行两个Web服务器的一...

28030
来自专栏java一日一条

Java Servlet工作原理问答

本文来自stackoverflow的问答,讨论了Java Servlet的工作机制,如何进行实例化、共享变量和多线程处理。

8620
来自专栏王磊的博客

你必须知道的session与cookie

13530
来自专栏王磊的博客

你必须知道的session与cookie

Session本质 提到Session我们能联想到的就是用户登录功能,而本身我们使用Session的基础是通过url进行访问的,也就是使用http协议进行访问的...

36790
来自专栏欧阳大哥的轮子

HTTP协议授权认证简介

我们平时在打开网页时或者在用浏览器访问你局域网的路由器时,经常会出现弹出登陆页面框要进行登陆授权后才能继续访问。比如如下提示:

11040
来自专栏后端技术探索

Restful风格的HTTP Basic Athorization基本认证API接口

话说什么是基本认证? 在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份证的方法,当一个...

12820
来自专栏运维小白

HTTP状态码详解

HTTP状态码介绍 状态码的职责是当客户端向服务器发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。 状态码的类...

25550
来自专栏运维小白

12.10 Nginx访问日志

Nginx访问日志目录概要 日志格式 vim /usr/local/nginx/conf/nginx.conf //搜索log_format $remote...

22760
来自专栏技术博客

Window Server 2008 R2 TFS2010 安装前的准备

http://www.cnblogs.com/aehyok/p/3979707.html 这里简单介绍了安装windows Server 2008 R2系统,...

22750
来自专栏精讲JAVA

Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

就是配置一个环境变量,和Jdk配置的环境变量一样,需要配置一个catalina.base的环境变量,值为TOMCAT_LOCATION

13630

扫码关注云+社区

领取腾讯云代金券