‘Enforce www.and index.php’实现IIS下虚拟主机301重定向

困扰很久的301重定向问题了,相信很多Windows主机的用户都会遇到和我一样的问题,特共享此插件,希望它没有辜负大家

这个插件是由Enforce www. Preference修改而来的,改插件代码如下

if ( strpos($_SERVER['HTTP_HOST'], 'www.') === 0  && strpos(get_bloginfo('home'), 'http://www.') === false ) {
$qs = $_SERVER['QUERY_STRING'];
$_SERVER['REQUEST_URI'] = substr($qs, strpos($qs, ':80')+3);
$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'];
include('index.php');
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://' . substr($_SERVER['HTTP_HOST'], 4) . $_SERVER['PATH_INFO']);
exit();
} elseif ( strpos($_SERVER['HTTP_HOST'], 'www.') !== 0 && strpos(get_bloginfo('home'), 'http://www.') === 0 ) {
$_SERVER['REQUEST_URI'] = substr($qs, strpos($qs, ':80')+3);
$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'];
include('index.php');
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.' . $_SERVER['HTTP_HOST'] . $_SERVER['PATH_INFO']);
exit();
}
?>

经过测试发现此插件并不完全适用于Windows主机下,http://bestjq.com直接使用该插件的结果是主页显示空白页,而其他页面均完美通过代码实现了301转发,去除第一段if 则实现301转发,但是主页转发后并没有去除“index.php”这点是非常让人觉得遗憾的地方,结果一些时间的思考终于找到了完美的解决办法,对if else语句进行了部分修改,经过测试能够完美实现Windows主机下强制加入/去掉WWW前缀和去除主页index.php后缀,欢迎大家下载使用,如有更好的修改方法或者有问题请告诉我。

下载地址:http://bestjq.com/wp-content/uploads/Enforce-www-and-index.rar

使用说明:1.有无www.是根据wordpress设置里面网站地址和博客地址决定的

2.在此之前可能要处理过永久链接的去除index.php问题去除的办法是在根目录下404.php内写入以下代码(如果出现404错误)

<?php
$qs = $_SERVER['QUERY_STRING'];
$_SERVER['REQUEST_URI'] = substr($qs, strpos($qs, ':80')+3);
$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'];
include('index.php');
?>