这个问题其实在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.confDocumentRoot "/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/