详解Apache重定向www到非www,http到https.jpg

详解Apache重定向www到非www,http到https

67
0

目录

本篇主要讲Apache重定向redirects,通过配置.htaccess文件实现www重定向到非www(或非www到www),http强制跳转到https。

基础篇:《Bluehost中WordPress配置免费版SSL和htaccess实现www和非www的HTTPS访问》

如果你只需要实现跳转功能不需明白原理,只看第二部分即可。

介绍

如何使用Apache服务器配置将站点从www重定向到非www(或非www到www)以及从HTTP重定向到HTTPS。为了更清楚,配置将重定向以下主机名:

http://example.com
http://www.example.com
https://example.com

https://example.com

如果更喜欢www,一个小的改动,将非www重定向到www版本。

配置Apache

将以下重定向规则添加到Apache配置文件,或在站点的根目录中新增一个.htaccess文件:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

如果你想实现全部跳转到www(www.example.com),则只需更改第三行加!和第五行加www,如下:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]   

原理

如果你需要更加个性化的定制,有必要继续读下去,有助于实现你的需求。

RewriteEngine On

第一行启用执行重定向所需的Apache 重写引擎。如果已在同一文件中的先前配置中启用了,可以跳过这行。

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]

这两行是重定向条件,它们用于确定是否应该重定向请求。因为条件与[OR]连接,如果这两个条件中的任何一个返回true,Apache将执行重写规则(重定向)。

第一个条件确定请求是否使用非HTTPS URL。第二个条件确定请求是否使用wwwURL。注意此处的使用www.和不使用www.,因为重写规则采用的是正则表达式,.点在这里有特殊含义,因此必须进行转义。

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]

第四行是一个实用行,用来避免直接在URL中引用主机名。它匹配传入请求的HOST,并将其分解为www部分(如果有),以及主机名的其余部分。我们将与随后参考%1的RewriteRule。

如果事先知道主机名,则可以通过内联URL并跳过此条件来改进规则(参阅后面的内容)。

RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

RewriteRule是重定向的核心。通过这一行,我们告诉Apache将任何请求重定向到新的URL,由以下组成:

  • https://WWW
  • %1:对主机的非www部分的调用
  • %{REQUEST_URI}:请求的URI,没有主机名

所有这些参数都连接在一起,代表最终的重定向URI。最后,我们附加3个标记:

  • NE 不要跳过特殊字符
  • R=301 使用HTTP 301永久重定向状态
  • L 停止处理其他规则,并立即重定向

备注

示例使用额外的RewriteCond行来提取主机名,并避免在规则中直接写主机名。如果觉得这对你来说是性能损失,可以直接在规则中写入主机:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,NE,R=301]

结论

本文提供了一种简单的配置,可将www和非HTTPS请求重定向到规范站点域。这对于避免搜索引擎的内容重复问题非常有用。

网上搜索有几十种方法在Apache中执行重定向,这只是其中一种可能性,无法覆盖所有可能的情况。希望通过“原理”部分中的说明,可以根据需要对其进行自定义。


留言

目录