当你有你的网站或应用程序启动和运行一个域的背后,则是经常需要还允许用户通过简单的域名访问到它,并在WWW子域名。也就是说,他们应该可以使用或不使用“ www.”前缀访问您的域名,例如,example.com
或者www.example.com
在Web浏览器中,并显示相同的内容。虽然有多种方法可以设置,但为了保持一致性和搜索引擎优化考虑,最佳解决方案是选择您喜欢的域名,简单或www,并将另一个域重定向到首选域。此类重定向称为永久重定向或“301重定向”,可以通过正确配置DNS资源记录和Web服务器软件轻松设置。
本教程将告诉你如何在WWW URL重定向到非www,例如,www.example.com
以example.com
在CentOS 7.我们也将告诉你如何在另一个方向重定向,从非www网址,与Apache WWW。
一台已经设置好可以使用sudo
命令的非root账号的CentOS服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
假设您已安装Apache(httpd)。
您必须能够将记录添加到管理域的DNS中。如果你没有域名,建议您先去这里注册一个域名,如果你只是使用此配置进行测试或个人使用,则可以使用自签名证书,不需要购买域名。自签名证书提供了相同类型的加密,但没有域名验证公告。关于自签名证书,你可以参考为Apache创建自签名SSL证书和如何为Nginx创建自签名SSL证书这两篇文章。并使用注册商的DNS进行管理。在本教程中,我们将使用腾讯云DNS创建必要的记录。
让我们开始配置您的DNS记录。
为了建立所需的重定向,www.example.com
以example.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访问您的网站。前缀,并重定向到您喜欢的域。
CentOS 7上的Rewrite模块默认启用。如果由于某种原因未启用它,请确保将此行添加到Apache配置的模块部分(默认情况下为/etc/httpd/conf.modules.d/00-base.conf
):
LoadModule rewrite_module modules/mod_rewrite.so
我们将使用.htaccess
文件为Apache配置重定向规则。这是必须通过放宽DocumentRoot的目录权限来启用的功能。
打开Apache配置文件以进行编辑。在CentOS上,默认配置文件位于/etc/httpd/conf/httpd.conf
,所以我们将在我们的示例中使用它:
sudo vi /etc/httpd/conf/httpd.conf
假设您使用的是默认的DocumentRoot,请/var/www/html
找到与其对应的配置块:<directory "/var/www/html>
。在该区块内,更改AllowOverride None
为:AllowOverride All
<Directory /var/www/html>
...
AllowOverride All
...
</Directory>
保存并退出。
现在重新启动Apache以使更改生效:
sudo systemctl restart httpd
现在,Apache配置为读取位于/var/www/html
目录下任何位置的.htaccess
文件。我们现在添加我们的重写规则。
如前所述,我们将使用.htaccess
文件配置Rewrite模块。
将目录更改为DocumentRoot,在我们的示例中是/var/www/html
:
cd /var/www/html
现在打开.htaccess
进行编辑:
sudo vi .htaccess
当然,如果您之前没有创建过该文件,它将为空白。根据要重定向的方向,使用以下选项之一。
如果要将用户从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: Mon, 04 May 2015 16:04:56 GMT
Server: Apache/2.4.6 (CentOS)
Location: http://example.com/
Content-Type: text/html; charset=iso-8859-1
当然,您应该在Web浏览器(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: Mon, 04 May 2015 16:05:26 GMT
Server: Apache/2.4.6 (CentOS)
Location: http://www.example.com/
Content-Type: text/html; charset=iso-8859-1
当然,您应该在Web浏览器(www和非www)中访问您的域以确保。
而已!您的Apache重定向现已正确配置,您的用户将能够通过非www和www域访问您的Web服务器。
更多CentOS教程请前往腾讯云+社区学习更多知识。
参考文献:《How To Redirect www to Non-www with Apache on CentOS 7》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有