WordPress通过301重定向实现非首先域(非www)跳转

首先我们来认识两个名词:首选域、301重定向
首选域
首选域是您希望搜索引擎用来将您的网页编入索引的域(有时也指规范域)。指向您网站的链接也许会使用 www 和非 www 两种网址(例如 http://www.example.com 和 http://example.com)。首选域是您希望您的网站在搜索结果中所显示的格式。
比如:一个站点有两个域名:www.hujuntao.com. hujuntao.com
那么搜索引擎默认以为,这两个域名是指向同一个网站的。在搜索引擎收录和展示稳定下来后,它会选择其中一个域名来展示给用户,那么这个域名就叫做首选域。
如何设置首选域:
1、301重定向设置网站的首选域
2、首页的链接尽量全部采用绝对地址
3、在所有涉及到要发网址或链接的地方(站内外锚文本及友情链接等)都采用您的首选域
4、针对Google可以通过Google网站管理员工具设置首选域
301重定向
什么是301转向?
301转向(或叫301重定向,301跳转)是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。
其它常见的状态码还包括,200表示一切正常,404网页找不到,302暂时转向,等等。
为什么要做网址转向?
除了前面介绍过的网址规范化问题外,还有很多需要做网址转向的情形。比如,为保护版权,你拥有不同TLD的多个域名:
hujuntao.com hujuntao.net  hujuntao.org  hujuntao.com.cn  hujuntao.cn 等等。
很自然这些域名全部指向一个网站。如用hujuntao.com为主域名,其它域名就可以转向到hujuntao.com。
或者你注册了公司全称域名hujuntao.com,但太长 ,你也注册了缩写域名方便用户记住hjt.com,其中一个做主域名,另一个就可以转向到主域名。
为什么要用301转向?

当网页A用301重定向转到网页B时,搜索引擎可以肯定网页A永久的改变位置,或者说实际上不存在了,搜索引擎就会把网页B当作唯一有效目标。好处是,第一,没有网址规范化问题,第二,也很重要的,网页A的PR网页级别会传到网页B。
很多时候其它网站会链接到
http://hujuntao.com  http://www.hujuntao.com/index.html   http://hujuntao.com/index.html
而不是你希望的 http://www.hujuntao.com
这样链接的PR也会传递到所有URL,如果你用301转向把前三个URL转到   http://www.hujuntao.com  PR也就集中在网页http://www.hujuntao.com了。
由此可见首选域对一个网站来说是非常重要的。
1、首选域的选择
首选域可以是www.example.com也可以是example.com,但是有且只能是一个。
2、通过301重定向实现非首先域名跳转
Linux主机,修改.htaccess即可

# BEGIN WordPress
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^cnbabyup.com$ [NC]
RewriteRule ^(.*)$ http://cnbabyup.com/$1 [L,R=301]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

widows主机 ISAPI_Rewrite 实现方法

# For ISAPI_Rewrite 2.x
RewriteCond Host: ^steveluo.name$
RewriteRule (.*) http://www.steveluo.name$1 [I,RP]

# For ISAPI_Rewrite 3.x
RewriteCond %{HTTP:Host} ^steveluo.name$
RewriteRule (.*) http://www.steveluo.name$1 [NC,R=301]

如果你的是虚拟主机不支持urlRewrite没关心继续向下看:
我们先看看来自互联网上的代码:

if ( $_SERVER['HTTP_HOST'] != 'www.hujuntao.com') {
header('HTTP/1.1 301 Moved Permanently');
header('Location:http://www.hujuntao.com');
exit();
}

ps:以上代码仅供示例用,不推荐直接使用。

该方法虽然实现了非首选域名(非 www)重定向到首选域名(www),但是域名带的参数没有传过去,例如访问:hujuntao.com/?p=3却重定向到www.hujuntao.com。
我们对刚刚的代码进行下修改:

if ($_SERVER['HTTP_HOST'] != 'www.hujuntao.com') {
header('HTTP/1.1 301 Moved Permanently');
header('Location:http://www.hujuntao.com'.$_SERVER['HTTP_X_REWRITE_URL']);
exit();
}

ps:以上代码仅供示例用,不推荐直接使用。
这样即实现了非首选域名的调转也实现了参数的传递。
下面我们来解决下一个问题:
http://hujuntao.com/index.php to http://www.hujuntao.com/
http://www.hujuntao.com/index.php to http://www.hujuntao.com/
出现多个首页地址对于你的首页地址权重就会被分散。
不管是http://hujuntao.com/index.php还是http://www.hujuntao.com/index.php也或是index.php带有参数我们都希望重定向到
http://www.hujuntao.com/中。下面来看看具体实现方法:
首先实现http://hujuntao.com/index.php 重定向 http://www.hujuntao.com/ ,我们对上面的例子做下小小的修改

$request_url = str_replace('index.php','',strtolower($_SERVER['HTTP_X_REWRITE_URL']));
if ( $_SERVER['HTTP_HOST'] != 'www.hujuntao.com') {
header('HTTP/1.1 301 Moved Permanently');
header('Location:http://www.hujuntao.com'.$request_url);
exit();
}

ps:以上代码仅供示例用,不推荐直接使用。
下面解决http://www.hujuntao.com/index.php 重定向 http://www.hujuntao.com/的问题

$request_url = str_replace('index.php','',strtolower($_SERVER['HTTP_X_REWRITE_URL']));
if ( $_SERVER['HTTP_HOST'] != 'www.hujuntao.com' ($_SERVER['HTTP_HOST'] == 'www.hujuntao.com' && strpos($_SERVER["HTTP_X_REWRITE_URL"],"index.php"))) {
header('HTTP/1.1 301 Moved Permanently');
header('Location:http://www.hujuntao.com'.$request_url);
exit();
}

ps:以上代码仅供示例用,不推荐直接使用。

最终完美代码:

$host = 'www.hujuntao.com';
$request_url = str_replace('index.php','',strtolower($_SERVER['HTTP_X_REWRITE_URL']));
if ($_SERVER['HTTP_HOST'] != $host || ($_SERVER['HTTP_HOST'] == $host && strpos($_SERVER["HTTP_X_REWRITE_URL"],"index.php"))) {
   header("HTTP/1.1 301 Moved Permanently");
   header("Status: 301 Moved Permanently");
   header("Location: http://". $host . $request_url);
			exit();
}
unset($host);
unset($request_url);

复制以上代码另存为301.php,在你的头部最上方加入require_once(‘301.php’ );
wordpress修改根目录下的 wp-blog-header.php 加入require_once(‘301.php’ )
修改后的代码如下:

require_once('./wp-includes/301.php' );
if ( !isset($wp_did_header) ) {
	$wp_did_header = true;
	require_once( dirname(__FILE__) . '/wp-load.php' );
	wp();
	require_once( ABSPATH . WPINC . '/template-loader.php' );
}

301重定向检测工具:http://www.seoconsultants.com/tools/check-server-headers-tool/
在URL栏出入你的非首选域名(非WWW)点击Check Headers出现 HTTP/1.1 301 Moved Permanently 则证明重定向成功
如果你的主机是window apache搭建的请将$_SERVER[“HTTP_X_REWRITE_URL”]改为
$_SERVER[“REQUEST_URI”]
原因详见:《$_SERVER[‘REQUEST_URI’]和$_SERVER[“HTTP_X_REWRITE_URL”]的区别》

“WordPress通过301重定向实现非首先域(非www)跳转”的3个回复

发表评论

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