不得已把wordpress迁移到了wimp平台下,seo强迫的我自然要求链接友好,但IIS6没有自带rewrite功能(据说IIS7会好点,wordpress可默认支持IIS7下的URL重写)。如果用ISAPI Rewrite得自己写正则匹配,还不一定能匹配的成功,于是我找到了一个更方便的方法,堪称完美。
这个方法是通过IIS的自定义404页面实现,首先在wordpress根目录下新建一个404.php,然后把下面的代码复制到里面去:
<?php
// This is the default file for the site. Usually index.php
$default = ‘index.php’;
// The name of this file.
// Set this value for the URL in Custom Error Properties of your website in IIS.
// Goto: IIS Manager > Websites > [Site Name] > Properties > Custom Errors >
// 404 & 404;2 & 404;3 > URL (Requires a ‘/’ prefix in IIS).
$thisfile = ’404-handler.php’;
$_SERVER['ORIG_PATH_TRANSLATED'] = str_replace($thisfile, $default, $_SERVER['ORIG_PATH_TRANSLATED']);
$_SERVER['SCRIPT_FILENAME'] = str_replace($thisfile, $default, $_SERVER['SCRIPT_FILENAME']);
$_SERVER['ORIG_PATH_INFO'] = str_replace($thisfile, $default, $_SERVER['ORIG_PATH_INFO']);
$_SERVER['SCRIPT_NAME'] = str_replace($thisfile, $default, $_SERVER['SCRIPT_NAME']);
$_SERVER['PHP_SELF'] = str_replace($thisfile, $default, $_SERVER['PHP_SELF']);
$_SERVER['PATH_INFO'] = false;
$qs =& $_SERVER['QUERY_STRING'];
$ru =& $_SERVER['REQUEST_URI'];
$pos = strrpos($qs, ‘://’);
$pos = strpos($qs, ‘/’, $pos + 4);
$_SERVER['URL'] = $ru = substr($qs, $pos);
$qs = trim(stristr($ru, ‘?’), ‘?’);
// Required for WordPress 2.8+
$_SERVER['HTTP_X_ORIGINAL_URL'] = $ru;
// Fix GET vars
foreach ( $_GET as $var => $val ) {
if ( substr($var, 0, 3) == ’404′) {
if ( strstr($var, ‘?’) ) {
$newvar = substr($var, strpos($var, ‘?’) + 1);
$_GET[$newvar] = $val;
}
unset($_GET[$var]);
}
break;
}
include($default);
?>
在“自定义错误”指向404.php,然后访问博客主页,看看各个页面是不是可以了?
我用firebug和google webmastertools查看状态,都是200,并非404,所以不用担心google不收录这样的页面。
以上方法参见这里(英文):
http://www.ikailo.com/94/url-modrewrite-workaround-iis-60/
http://tech.einaregilsson.com/2007/07/30/pretty-wordpress-permalinks-on-iis/
(以下是写给自己看的):
这个方法对我来说还会有点问题,我配置好后发现三个博客的categary不管是否中文都可以访问,比如“http://blog.linggan.com/tag/电子商务”,但日期分类页面和分页页面均无法访问。后来发现其他人用这个方法,却可以访问日期分类。观察了下原来他们的链接里多了一个斜杠号“/”,只要我在日期分类和分页链接后加个斜杠,也可以访问了。但发现有个人的博客用http://wp.feiyan.info/page/1 这样的链接也可以访问,我意识到不是斜杠不斜杠的问题。而是自己的配置问题,突然意识到有可能是以前写的rewrite规则冲突!原来我以前写过facepk.com的rewrite规则,凡是后面是数字结尾的都会进行匹配,而免费的rewrite是全局生效的,会让所有IIS下的网站都生效,所以就导致这个404的问题了!
解决办法,去掉facepk.com的rewrite规则,facepk.com流量很低,也不需要seo,不过这里做个备份:
RewriteRule /facepk/(d{1,5})$ /facepk/facepk.asp?id=$1
RewriteRule /(d{1,5})$ /facepk.asp?id=$1
另外,之所以前面tag/xxx可以访问,也是因为以前就在httpd.conf中加了以下两句,现在可以删了!
RewriteRule /tag/(.*) /index.php?tag=$1
RewriteRule /cat/(.*) /index.php?category_name=$1
现在httpd.conf里就没有东西了。
之前我还试过用ISAPI组件的方法来设置友好链接,但一直没设置成功。
 
网站首页
站长作品
网站服务
留言交流
建议提交 
1楼淘宝网女装
Post: 2010-08-20 12:43
你好,这是windows的设置,有iis的设置方法吗?
2楼ァζ文文ゞ
Post: 2010-08-20 12:51
IIS不就是windwos下的吗,至于空间,那是空间商决定的!其实,我建议大家还是用linux!为什么,看这儿吧:http://www.zwnow.com/2010_08_810.html,我的感言啊!