wordpress:处理www和non-www之间的跳转

这个问题其实在wordpress里似乎不存在,在后台将“站点地址(URL)”设置为

http://www.yourwordpressite.com

访客通过

http://yourwordpressite.com

也能访问,原因在于wordpress进行了301跳转。实现代码可参考

/wp-includes/ -> canonical.php -> redirect_canonical()

既然已经内设了这个功能,为什么还要讨论www和non-www之间的跳转问题呢?
问题源于今天查看阿里云监控时,提示www和non-www之间存在的时间差。我在想,这个时间差也许就是wordpress内设功能所耗费的吧?!

参考了一些资料包括别人的讨论,再根据自己的实际情况(nginx服务器),对站点配置文件进行调整,具体如下:

server {
    listen       80;
    server_name  yourwordpresssite.com;
    return       301 http://yourwordpressite.com$request_uri;
}

server {
    listen       80;
    server_name  www.yourwordpressite.com;
    ...
    #站点实际路径等信息
}

这表示将访客所输入的地址信息,放在了nginx服务器入口去判断并进行重定向(主动将访客录入的yourwordpressite.com地址301/302到www.yourwordpressite.com上,免去后期程序的判断与执行)。
也有建议使用rewrite模块进行重定义,配置信息如下:

server {
    listen       80;
    server_name  www.yourwordpressite.com  yourwordpressite.com;
    if ($http_host = yourwordpressite.com) {
        rewrite  (.*)  http://www.yourwordpressite.com$1;
    }
    ...
}

对于从SEO角度来讲,yourwordpressite.com和www.yourwordpressite.com指向同一个站点其实是内容的一种重复;为此还是建议以return的方式返回301为好。
相比而言,更推荐使用Return的方式解决这样的跳转问题,因为return方式在nginx执行站点搜索时,一有结果就直接返回并停止执行了,而rewrite却还需要进一步判断。

以上是nginx环境下的一些设置,相对于apache环境,原理如出一辙,全部参考代码分享如下:

#vhost.conf
    
       DocumentRoot "/var/www/public_html/...."
       ServerName www.yourwordpressite.com
       ......
    

    
      ServerName yourwordpressite.com
      RedirectMatch permanent ^/(.*) http://www.yourwordpressite.com/$1
    

当然,也可以使用.htaccess实现,代码:

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

至此全部配置完成,最后别忘了重启nginx或apache服务。

@2017-03-02
网友Amanda通过邮件告知,其收集整理并分享了一篇《Ultimate .htaccess Guide》
非常具有参考价值,推荐阅读:
http://www.whoishostingthis.com/resources/htaccess/

参考资料:
http://nginx.org/en/docs/http/converting_rewrite_rules.html
http://serverfault.com/questions/35955/how-to-get-nginx-to-redirect-from-www-to-non-www-domain
http://stackoverflow.com/questions/7947030/nginx-no-www-to-www-and-www-to-no-www/11733363#11733363
http://www.askapache.com/htaccess/seo-search-engine-friendly-redirects-without-mod_rewrite.html
http://stackoverflow.com/questions/1100343/apache-redirect-from-non-www-to-www/

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注