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工具对我们建站还是有一定帮助的:
- 1、死链检测工具:我正在使用的2个免费的中文SEO工具:死链检测和SEO信息查询
- 2、百度SEO工具:百度SEO建议工具很虚幻!Linkadage把谷歌PR变美元很实在
- 3、很老的SEO平台:ranknow检查网站健康状态,傻瓜式在线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]
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
1、如果你正在使用Windows VPS,那么要实现301永久重定向,只需要进入IIS的网站管理控制面板中。
2、找到HTTP重定向,点击进入。
3、在这里输入你想要重定向的网址,下方选择301,保存即可。
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]
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代码,
3、查看了一下我的head.php文件,里面的PHP 301永久重定向代码一直存在着。
4、为了证明Wp Super Cache对PHP 301重定向干扰的问题,我在我的Godaddy空间上的Wordpress也安装了Wp Super Cache插件。
5、然后将上述的PHP 301重定向代码放入head.php中,域名重定向到百度首页,如果这段代码生效了那么打开浏览器后应该是百度首页。
6、结果用浏览器打开Godaddy这个博客后,还是WP首页,并没有重定向。
7、而用站长工具测试了一下http返回代码,结果有点怪异:显示301又说没有重定向。
1、经过我的测试,最后发现用.htaccess来做301永久重定向可以避免Wp Super Cache导致PHP 301重定向失效的问题。
2、而且.htaccess中的代码必须要放在Wp Super Cache的url重写规则之前。
3、实际上,如果你在实际的操作过中添加了上述代码结果测试却不是301,则有可能和我遇到的错误一样了。
4、因为URL标准化的301重定向(以上代码)需要写在其他URL-rewrite代码之前。
5、最后用站长工具测试了一下,看到freehao123.com返回的是301代码就表明301永久重定向成功了。
6、为什么要做301永久重定向?重要性可以从百度对带www和不带www的收录快照中得知。
7、这是我的freehao123.com域名的百度收录快照,不过这在以前是没有单独的显示此域名的快照,因为之前一直做了PHP 301永久重定向。
8、只是最近才悲剧了,freehao123.com突然不显示301重定向了,被百度收录了。而www.freehao123.com这个域名还是正常收录着。
9、两个域名都被收录但是快照不一样,说明如果不做301永久重定向,百度就会把不www和带www的域名当成两个网站来看待,这显然不利于主站的SEO了。
文章出自:免费资源部落 / 版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。
您或许对下面这些文章有兴趣: 本月吐槽辛苦排行榜
-
沙发?搬个板凳来慢慢看
[回复] -
神马板凳!
[回复] -
学到老,活到老!
[回复] -
已成功将peilly.com重定向到www.peilly.com
请问:
我原来网站相册为https://www.peilly.com/gallery,绑定的子域名是https://img.peilly.com,但我刚刚重定向主域名peilly.com后,我的子域名img.peilly.com也被自动重定向到https://www.peilly.com/gallery/了。晕啊!请问怎么让我的子域名不被自动重定向呢?[回复] -
我在绑定郁闷时只绑定了顶级的,没绑定WWW的。然后在DNSPOD上将带WWW的URL到不带WWW的,没有设置301,访问带WWW的网址也是跳转到顶级域名的,我这样可代替301吗?但是很奇怪,百度收录我的都是带WWW的,其他搜索引擎收录的是不带WWW的。
[回复] -
打错别字了,不是“郁闷”是“域名”
[回复] -
有谁用过国内主机屋的空间吗?我的怎么只可以访问根域名而不能访问带www的呢?是WIN主机,根目录下没有httpd.ini 这文件,不知道怎么能跳到www上。网址是:[url]https://ykreed.tk/[/url],在my.dot.tk 是用A记录根域和www的。
[回复] -
已解决。给客服提交工单,回复说是要把根域和www到绑定到空间上。。。
[回复] -
安装了一个WordPress Mu,它的主域老是编程一个新注册的 。。www.jzabc.me和jzabc.me 。。求解决 。。
[回复] -
方法很多,讲的也很详细!博主是一个不错的家伙!
[回复] -
原先是这样写的,要把www.drshui.me定向到drshui.me
# BEGIN WordPressRewriteEngine 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][回复] -
我的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的[回复] -
我想把域名重定向到某个目录,怎么办呢?
[回复] -
留下足迹
[回复] -
在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;
}
[回复] -
太感谢了!成功解决问题!但还有两个疑问,请指教:
1、Wp Super Cache是wordpress最好的加速插件吗? 可以用其他插件达到同样的加速效果吗?
2、你最后301和Wp Super Cache兼顾的办法用的是.htaccess,那如果我也想用Wp Super Cache, 但是我的云主机装是Nginx,不是用.htaccess, 而是要配置Nginx的Vhost.conf这个文件,我该如何兼顾好Wp Super Cache,避免301失效呢?
[回复] -
在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;
}[回复]