301永久重定向设置和Wp Super Cache导致PHP 301重定向失效

免费建站   2023年10月09日 12:35  

301永久重定向设置和Wp Super Cache导致PHP 301重定向失效

今天看到henghengzhu.com站长给我的留言,说我的网站不带www的域名不会直接跳转到带www的域名上。我觉得很奇怪,因为一直以为我的域名301永久重定向早在三年前建站时就已经做好了,自己又没有改动代码,怎么会失效呢?

不过后来经过我的测试,发现freehao123.com用浏览器打开后确实不会重定向到www.freehao123.com上,这让我不可思议。因为三年前建站初始自己就设置了PHP代码的301永久重定向,一直相安无事,没有想到三年后301重定向没有了。

所谓301永久重定向,这是SEO中的一个基础名词,在URL规范化中会用到,301永久重定向是所有的重定向方法中唯一符合搜索引擎规则的重定向方法。尤其是在网站更换域名、多域名指向同一网站、网址规范化时301重定向就非常重要了。

为了搞定301永久重定向折腾了一个晚上,最却发现问题出在了Wp Super Cache这个插件上:使用了Wp Super Cache插件后,由于生成了html静态文件,导致PHP代码版本的301重定向失效。可怜我已经用了这个插件有半年多了,居然到现在才知道。。。

关于SEO,虽然好多人像我一样不是很专业,但是学会用一些SEO工具对我们建站还是有一定帮助的:

301永久重定向设置和Wp Super Cache导致PHP 301重定向失效

一、301永久重定向设置Apache服务器.htaccess代码篇

1、如果是你用的Linux主机,一般建议使用.htaccess来做301永久重定向,这样既方便又执行效率高。

2、重定向freehao123.com到www.freehao123.com,请在.htaccess中加入下列代码:


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

3、重定向www.freehao123.com到freehao123.com,请在.htaccess文件中加入下列代码:


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

4、重定向laoyuming.com到www.xinyuing.com,请在.htaccess文件中加入下列代码:


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

5、重定向laoyuming.com到xinyuing.com,请在.htaccess文件中加入下列代码:


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

6、不同域名下,用301将绑定的其他域名重定向到主域名,例如将freehao123.net和www.freehao123.info统一为www.freehao123.com


RewriteEngine on
RewriteCond %{HTTP_HOST} ^freehao123.net$ [OR]
RewriteCond %{HTTP_HOST} ^www.freehao123.info$
RewriteRule ^(.*)$ /$1 [R=301,L]

7、还有一些SEOer觉得index.php和index.html这样的也要重定向www.freehao123.com,以防止权重分散。


RewriteEngine on
RewriteRule ^index\.php$ / [R=301,L]

二、301永久重定向设置Nginx服务器conf规则篇

1、如果你使用的Linux服务器采用的是Nginx,那么你就要先将conf规则下来。具体路径不同的服务器会不同。

2、打开conf文件(如果用的是LNMP0.6一体包则是在/usr/local/nginx/conf/vhost/freehao123.com.conf)

3、正常的话conf一般前面部分是显示是这样的:


server{
listen      80; 
server_name www.freehao123.com freehao123.com;  
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/www.freehao123.com;
}

4、现在你需要将一段Nginx服务器conf的301永久重定向规则添加在server_name www.freehao123.com freehao123.com; 下面:


if ($host != 'www.freehao123.com' ) {
rewrite ^/(.*)$ /$1 permanent;
}

5、最后代码conf文件前面的部分应该是显示这样的:


server{
listen      80; 
server_name www.freehao123.com freehao123.com; 

if ($host != 'www.freehao123.com' ) {
rewrite ^/(.*)$ /$1 permanent;
}

index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/www.freehao123.com;
}

6、上传该文件覆盖,或者在SSH直接编辑保存。最后执行下列命令,重载配置,完成生效。


/root/lnmp reload

三、Windows VPS和虚拟主机301永久重定向设置

1、如果你正在使用Windows VPS,那么要实现301永久重定向,只需要进入IIS的网站管理控制面板中。

Windows VPS进入网站管理

2、找到HTTP重定向,点击进入。

Windows VPS找到HTTP重定向

3、在这里输入你想要重定向的网址,下方选择301,保存即可。

Windows VPS输入网址

4、另外如果你使用的是Windows虚拟主机,可以通过修改httpd.ini来做301永久重定向。

5、根据httpd.ini文件版本号来选择没的301重定向代码。其中1.*的都不支持301,只能是302临时跳转,这个要慎用。

6、下面的代码实现的效果是将freehao123.com重定向到www.freehao123.com。


#ISAPI_Rewrite 1.3 版本(此处为302状态码。)
[ISAPI_Rewrite]
#3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond Host: ^freehao123\.com$
RewriteRule (.*) http\://www\.freehao123\.com$1 [I,R]
-------------------------------------------------------------
# ISAPI_Rewrite 2.x 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond Host: ^freehao123.com$
RewriteRule (.*) https://www.freehao123.com$1 [I,RP]
-------------------------------------------------------------
 
# ISAPI_Rewrite 3.0 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond %{HTTP:Host} ^freehao123.com$
RewriteRule (.*) https://www.freehao123.com $1 [NC,R=301]

四、301永久重定向设置通用方法:PHP和ASP代码法

1、如果你用的是PHP程序,那么直接在你的PHP程序头部中加入下列代码:


<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location : /");
exit();
?>

2、或者用我曾经用的代码,实现的效果是将不带www重定向到带www域名上。


<?php
if($_SERVER['HTTP_HOST'] == 'freehao123.com')
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: /');
}
?>

3、如果你用的ASP程序,使用下列代码可以实现。


< %
Response.Status="301 Moved Permanently" 
Response.AddHeader "Location","/" 
Response.End
%>

4、ASP .NET下的301重定向代码是:


<script runat="server">
  private void Page_Load(object sender, System.EventArgs e)
  {
  Response.Status = "301 Moved Permanently";
  Response.AddHeader ("Location","/");
  }
  </script>

五、Wp Super Cache导致PHP 301重定向失效

1、Wp Super Cache是Wordpress博客的一个缓存加速插件,用了Wp Super Cache也快半年多了,也就是直到最近才发现我以前的PHP 301重定向失效了。

2、用站长工具测试了一下,freehao123.com返回的是200代码,

Wp Super Cache有了快照收录

3、查看了一下我的head.php文件,里面的PHP 301永久重定向代码一直存在着。

PHP 301重定向代码一直存在

4、为了证明Wp Super Cache对PHP 301重定向干扰的问题,我在我的Godaddy空间上的Wordpress也安装了Wp Super Cache插件。

5、然后将上述的PHP 301重定向代码放入head.php中,域名重定向到百度首页,如果这段代码生效了那么打开浏览器后应该是百度首页。

PHP 301重定向测试代码

6、结果用浏览器打开Godaddy这个博客后,还是WP首页,并没有重定向。

PHP 301重定向没有成功

7、而用站长工具测试了一下http返回代码,结果有点怪异:显示301又说没有重定向。

PHP 301重定向检测结果

六、网站301永久重定向的正确设置与意义

1、经过我的测试,最后发现用.htaccess来做301永久重定向可以避免Wp Super Cache导致PHP 301重定向失效的问题。

2、而且.htaccess中的代码必须要放在Wp Super Cache的url重写规则之前。

PHP 301重定向正确的放置方法

3、实际上,如果你在实际的操作过中添加了上述代码结果测试却不是301,则有可能和我遇到的错误一样了。

4、因为URL标准化的301重定向(以上代码)需要写在其他URL-rewrite代码之前。

5、最后用站长工具测试了一下,看到freehao123.com返回的是301代码就表明301永久重定向成功了。

PHP 301重定向终于生效了

6、为什么要做301永久重定向?重要性可以从百度对带www和不带www的收录快照中得知。

7、这是我的freehao123.com域名的百度收录快照,不过这在以前是没有单独的显示此域名的快照,因为之前一直做了PHP 301永久重定向。

PHP 301重定向百度照样收录

8、只是最近才悲剧了,freehao123.com突然不显示301重定向了,被百度收录了。而www.freehao123.com这个域名还是正常收录着。

PHP 301重定向正常收录着

9、两个域名都被收录但是快照不一样,说明如果不做301永久重定向,百度就会把不www和带www的域名当成两个网站来看待,这显然不利于主站的SEO了。

文章出自:免费资源部落 / 版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。

域名注册
购买VPS主机

您或许对下面这些文章有兴趣:                    本月吐槽辛苦排行榜

在这个部落村庄里,已经有54 位神马家族成员冒出泡来在农场开始干活了
  • 哼哼猪 12

    沙发?搬个板凳来慢慢看

    这是农场的第 1 块农田,部落批准 [哼哼猪] 在[2012-9-26 17:13]开垦完成.
  • 蓝天 11

    神马板凳!

    这是农场的第 2 块农田,部落批准 [蓝天] 在[2012-9-26 17:40]开垦完成.
  • 蓝天 11

    学到老,活到老!

    这是农场的第 3 块农田,部落批准 [蓝天] 在[2012-9-26 17:43]开垦完成.
  • 安卓博客 6

    呵呵,安卓#越长C的教程出来了!
    [url]https://www.azboke.com/ruanjian/191.html[/url]

    qi 回复:

    @安卓博客, 用%方法不错,以前我记得有人说不可以。看来安卓手机发展到现在已经无所不能了。

    这是农场的第 4 块农田,部落批准 [安卓博客] 在[2012-9-26 17:44]开垦完成.
  • 安卓博客 6

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www.freehao123.com$ [NC]
    RewriteRule ^(.*)$ /$1 [L,R=301]
    对吗

    qi 回复:

    @安卓博客, 是的。这是将不带www定向到带www的。

    安卓博客 回复:

    @qi, 好吧,我承认我是菜鸟

    qi 回复:

    @安卓博客, 其实www是个二级域名,不过现在用习惯了,都喜欢将不带www指向带www的。

    这是农场的第 5 块农田,部落批准 [安卓博客] 在[2012-9-26 17:46]开垦完成.
  • 哼哼猪 12

    其实你有没发现https://www.freehao123.com和/也是不同的

    oyoy 回复:

    @哼哼猪, 你简直研究到极致了

    qi 回复:

    @哼哼猪, 这个能有什么不同?

    ss_ss 回复:

    @qi,
    访问不带/的会再次跳转到带/的。。所以是不同的。。。

    qi 回复:

    @ss_ss, 我测试了一下,好像我的就是这样的。

    这是农场的第 6 块农田,部落批准 [哼哼猪] 在[2012-9-26 18:50]开垦完成.
  • 萧枫

    已成功将peilly.com重定向到www.peilly.com
    请问:
    我原来网站相册为https://www.peilly.com/gallery,绑定的子域名是https://img.peilly.com,但我刚刚重定向主域名peilly.com后,我的子域名img.peilly.com也被自动重定向到https://www.peilly.com/gallery/了。晕啊!请问怎么让我的子域名不被自动重定向呢?

    qi 回复:

    @萧枫, 那就这样写

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^(www.peilly.com|img.peilly.com)$ [NC]
    RewriteRule ^(.*)$ https://www.peilly.com/$1 [L,R=301]

    这是农场的第 7 块农田,部落批准 [萧枫] 在[2012-9-27 00:17]开垦完成.
  • 韩麦斯 9

    我在绑定郁闷时只绑定了顶级的,没绑定WWW的。然后在DNSPOD上将带WWW的URL到不带WWW的,没有设置301,访问带WWW的网址也是跳转到顶级域名的,我这样可代替301吗?但是很奇怪,百度收录我的都是带WWW的,其他搜索引擎收录的是不带WWW的。

    qi 回复:

    @韩麦斯, 用站长工具测试,你首页的301正确。但是内页的www网址301有问题,页面虽然有301,但是重定向到了首页,而不重定向到不带www的网址上。你看看是怎么回事。

    韩麦斯 回复:

    @qi, 我也不知道,用的是WIN主机,但主机商估计改造了,他们提供的301方法是用.htaccess的,有效。反而我自己建了个httpd.ini文件没什么作用。

    qi 回复:

    @韩麦斯, .htaccess只在Apache上运行,你的Windows主机上应该是安装了Apache了。

    这是农场的第 8 块农田,部落批准 [韩麦斯] 在[2012-9-27 02:56]开垦完成.
  • 韩麦斯 9

    打错别字了,不是“郁闷”是“域名”

    这是农场的第 9 块农田,部落批准 [韩麦斯] 在[2012-9-27 02:57]开垦完成.
  • 倡萌 5

    我之前也遇到过类似的情况,发现.htaccess文件的内容总是会被某个插件重置,后来我直接修改好以后,就将.htaccess设置为只读,一切就正常了

    qi 回复:

    @倡萌, 我现在设置了不可写了。在后台可以看到wp super cache提示让我修改htacess。

    这是农场的第 10 块农田,部落批准 [倡萌] 在[2012-9-27 07:50]开垦完成.
  • 正版软件分享 8

    301后百度依旧收录了顶级域名。。。

    qi 回复:

    @正版软件分享, 谷歌会根据权重来选择哪个顶级域名。百度是个弱智。

    这是农场的第 11 块农田,部落批准 [正版软件分享] 在[2012-9-27 08:06]开垦完成.
  • haclyok 11

    麻烦你帮我写一个
    www.liyufx.cn 301重定向到 bbs.liyufx.cn 的 .htaccess 规则
    谢谢

    qi 回复:

    @haclyok, 代码是

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !www.liyufx.cn$ [NC]
    RewriteRule ^(.*)$ https://bbs.liyufx.cn/$1 [L,R=301]

    这是农场的第 12 块农田,部落批准 [haclyok] 在[2012-10-1 01:04]开垦完成.
  • 无名 6

    这个非常的详细,今天凌晨将我的博客搬到那个坑了我20刀的空间上,用了CDN后感觉速度快了很多,而且博客响应上也比红帽空间要快

    qi 回复:

    @无名, 坑了?那钱到底是怎么回事?

    这是农场的第 13 块农田,部落批准 [无名] 在[2012-10-2 11:51]开垦完成.
  • wumign 6

    那20刀到现在还没有着落,不过brainhost的主机反应速度还是可以的,估计是用的人少的原因。

    qi 回复:

    @wumign, 机房是用哪里的?

    这是农场的第 14 块农田,部落批准 [wumign] 在[2012-10-3 01:14]开垦完成.
  • 二手 6

    前两天做了301跳转把不带www的转到www上。我是windows的主机。昨天突然网站不能访问。折腾了两天才知道问题是这个。我不知道怎么看ISAPI_Rewrite版本一个个试的。刚做完可以。不知道为什么过两天网站都无法访问了。该怎么做呢

    qi 回复:

    @二手, 是国内主机吧,可以咨询一下主机商ISAPI_Rewrite的版本。你添加代码后,测试结果是301吗?我怀疑可能是没有成功添加,等你的浏览器清除缓存后又无数访问了。

    这是农场的第 15 块农田,部落批准 [二手] 在[2012-10-25 22:18]开垦完成.
  • peascloud 16

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

    可以这样么

    qi 回复:

    @peascloud, 可以这样。

    这是农场的第 16 块农田,部落批准 [peascloud] 在[2012-11-9 11:57]开垦完成.
  • zero 3

    请问,用.htaccess做了伪静态的PHP程序如何做301重定向?

    qi 回复:

    @zero, 将301重定向的代码放在伪静态规则的前面就好了。

    这是农场的第 17 块农田,部落批准 [zero] 在[2012-11-15 18:01]开垦完成.
  • reed 9

    有谁用过国内主机屋的空间吗?我的怎么只可以访问根域名而不能访问带www的呢?是WIN主机,根目录下没有httpd.ini 这文件,不知道怎么能跳到www上。网址是:[url]https://ykreed.tk/[/url],在my.dot.tk 是用A记录根域和www的。

    这是农场的第 18 块农田,部落批准 [reed] 在[2012-11-28 20:47]开垦完成.
  • reed 9

    已解决。给客服提交工单,回复说是要把根域和www到绑定到空间上。。。

    这是农场的第 19 块农田,部落批准 [reed] 在[2012-11-29 14:28]开垦完成.
  • babytomas

    安装了一个WordPress Mu,它的主域老是编程一个新注册的 。。www.jzabc.me和jzabc.me 。。求解决 。。

    这是农场的第 20 块农田,部落批准 [babytomas] 在[2012-12-15 09:57]开垦完成.
  • Arucr 2

    方法很多,讲的也很详细!博主是一个不错的家伙!

    这是农场的第 21 块农田,部落批准 [Arucr] 在[2012-12-19 00:44]开垦完成.
  • 经验公式 3

    我研究了一下,有点问题,那个主域名跳转到www域名的代码会影响到子域名哎。。我找了教程写了篇文章,用这个代码貌似就可以了:https://www.jygongshi.com/post/301-one-site-one-domain

    qi 回复:

    @经验公式, 原来是这样,是不是代码没有写全规则?

    经验公式 回复:

    @qi, 那就不清楚了~.htaccess没仔细研究过

    这是农场的第 22 块农田,部落批准 [经验公式] 在[2013-5-18 10:34]开垦完成.
  • shui 3

    原先是这样写的,要把www.drshui.me定向到drshui.me
    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # END WordPress

    但是不管我在RewriteBase /前或者后面加上下面两句后,drshui.me可以访问,带www就无法访问了
    RewriteCond %{HTTP_HOST} !^drshui.me$ [NC]
    RewriteRule ^(.*)$ https://drshui.me/$1 [L,R=301]

    qi 回复:

    @shui, https://www.drshui.me/可以正常访问,你是说不正常正常跳转吗?在.htaccess最前面加入这么一段:

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

    shui 回复:

    @qi, 在最前面加好了 :smile:
    之前出现错误我把他删了的,按照你的建议设置了下,好了,3Q

    这是农场的第 23 块农田,部落批准 [shui] 在[2013-8-10 13:38]开垦完成.
  • haze 6

    我的conf是这样的location / {
    if (-f $request_filename/index.html){
    rewrite (.*) $1/index.html break;
    }
    if (-f $request_filename/index.php){
    rewrite (.*) $1/index.php;
    }
    if (!-f $request_filename){
    rewrite (.*) /index.php;
    }
    }

    怎么添加301?
    从www转到不带www的

    这是农场的第 24 块农田,部落批准 [haze] 在[2013-8-12 09:00]开垦完成.
  • Devil0S 1

    我想把域名重定向到某个目录,怎么办呢?

    这是农场的第 25 块农田,部落批准 [Devil0S] 在[2014-2-5 00:18]开垦完成.
  • 带着幾米去旅行 2

    留下足迹

    这是农场的第 26 块农田,部落批准 [带着幾米去旅行] 在[2014-5-17 20:59]开垦完成.
  • 周董

    在WP博客下设置301重定向,修改根目录下的wp-blog-header.php
    将以下代码复制在头部

    <?php
    if($_SERVER['HTTP_HOST'] == 'loldaida.cn')
    {
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: https://www.loldaida.cn');
    exit;
    }

    这是农场的第 27 块农田,部落批准 [周董] 在[2014-7-7 14:30]开垦完成.
  • bod

    太感谢了!成功解决问题!但还有两个疑问,请指教:

    1、Wp Super Cache是wordpress最好的加速插件吗? 可以用其他插件达到同样的加速效果吗?

    2、你最后301和Wp Super Cache兼顾的办法用的是.htaccess,那如果我也想用Wp Super Cache, 但是我的云主机装是Nginx,不是用.htaccess, 而是要配置Nginx的Vhost.conf这个文件,我该如何兼顾好Wp Super Cache,避免301失效呢?

    qi 回复:

    @bod, Wp Super Cache适合在apache上。博主是Nginx的,可以试试Hyper Cache这个插件,Nginx上无法发挥Wp Super Cache的作用。

    这是农场的第 28 块农田,部落批准 [bod] 在[2015-12-31 13:54]开垦完成.
  • 在WP博客下设置301重定向,修改根目录下的wp-blog-header.php
    将以下代码复制在头部

    <?php
    if($_SERVER['HTTP_HOST'] == 'dailianku.com')
    {
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: https://www.dailianku.com');
    exit;
    }

    这是农场的第 29 块农田,部落批准 [代练] 在[2017-4-1 11:27]开垦完成.
看贴要回贴有N种理由!看帖不回贴的后果你懂得的!


评论内容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索栏

各类专题梳理

网站导航栏

X
返回顶部