这篇文章解决两个问题:301跳转设置和跳转过程中的源站 IP 隐藏。环境:Linux + Apache + WordPress,尤其是使用 wdCP 的朋友注意下,没有必要再在面板里新建网站。

一、主流跳转需求

配合CDN进行301跳转完美隐藏源站IP-极客飞船

301跳转直接解决的问题是:带 www 的域名跳转到不带 www 的域名,或反过来。

有用心建站的站长都绕不开这个话题,网上搜到的 Apache 下的 Rewrite 写法有一堆,让人犯昏。在这里,我放几个亲测有效的,用法是将规则加入到网站根目录的 .htaccess 文件。

带 www 跳转不带 www:

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

不带 www 跳转带 www:

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

Http 强制跳转 Https:

RewriteCond %{HTTPS} !on [NC]
RewriteRule (.*) https://geekufo.com%{REQUEST_URI} [R=301,NC,L]

不要忘了在 WordPress 后台「设置」-「常规」中,把「wordpress地址(URL)」和「站点地址(URL)」改成要跳转网址。

二、注意大坑

网上一些关于 wdCP 或其他面板下做 301 跳转的教程有大坑,以前我在搜索关键词“ wdCP 301”找资料时遇到过,由于很多面板都自带 301 跳转选项,这些教程无一不是说要在里面新建、绑定、勾选balabalabala,过程之繁琐,原因也含糊,最后逻辑可以归结为: 把 301 跳转当成新建网站的域名解析来做,跳转前的域名解析到源站 IP

千万别这么干,已经这么干了赶快改!

我们用中国站长之家的 HTTP 状态查询工具看看正常的 301 跳转是什么样的:

配合CDN进行301跳转完美隐藏源站IP-极客飞船

可以看到 www 跳转无 www 的极客飞船,返回状态码 301,而使用了 CDN 的情况下服务器 IP 为 CDN 的分发节点 IP。

如果,极客飞船将 301 跳转请求直接交由源站处理,那么将返回状态码 200 和源站 IP。

这样,辛苦搭建的 CDN 将直接失去它的掩护作用,源站 IP 也会暴露在他人眼皮底下。

三、正确姿势

想要强化服务器安全, CDN 是把利器,如果还不了解什么是 CDN 可以看看:网站CDN搭建方法和缓存策略分享

以本站为例,接下来,在 CDN 中将两种域名都添加上,

配合CDN进行301跳转完美隐藏源站IP-极客飞船

在域名解析处将两种域名类型都接入 CDN,

配合CDN进行301跳转完美隐藏源站IP-极客飞船

由于极客飞船是主@主机记录,即主域名不带 www,所以 www.geekufo.com 在 CDN 无需做缓存。

配合CDN进行301跳转完美隐藏源站IP-极客飞船

完工,逻辑简单粗暴:CDN 冲在前头,形成「客户端 — CDN — 源站」的结构。