January 6th, 2009

WordPress永久链接Windows/IIS下静态化去index.php方法

Learning, by 木公.

以前在用PJ时就很欣赏WP的永久链接系统,等到自己换成WP后,突然发现我的主机空间不能正常使用WP的永久链接;原因是Windows/IIS主机对PHP程序支持,尤其是.htaccess和Rewrite支持不好,后来找了N多方法后,终于找到了一个比较简单的解决方法。

不需要你懂得IIS下的httpd.ini配置规则,只要复制粘贴即可。

只要你的虚拟主机空间支持自定义404错误页即可,方法:

1.新建一个记事本,在里面写入下面代码,保存,连同txt格式重新命名为404.php。将404.php上传到你的网站根目录。

< ?php
header("HTTP/1.1 200 OK");
$ori_qs = strtolower($_SERVER['QUERY_STRING']);
$pattern = '/[^;]+;[^:]+:\/\/[^\/]+(\/[^\?]*)(?:\?(.*))?/i';
 
preg_match($pattern, $ori_qs, $matches);
$_SERVER['PATH_INFO'] = $matches[1] . '?' . $matches[2];
$_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO'];
$query_args = explode('&', $matches[2]);
unset($_GET);
foreach ($query_args as $arg)
{
$the_arg = explode('=', $arg);
$_GET[$the_arg[0]] = $the_arg[1];
}
 
include('index.php');
?>

2.设置404自定义错误指向wp-404-handler.php,一般来说,绝大多数服务器控制面板均提供该选项。

3.进入WordPress2.7管理后台,“设置”→“永久链接”,随意设置自己喜欢的伪静态地址格式及静态地址后缀。

例如:

/y%year%/%post_id%.html

/%year%/%monthnum%/%post_id%.html

/%year%/%monthnum%/%postname%.html

我用的格式是:/%Category%/%postname%/

为了方便搜索引擎收录/SEO,请注意代码开头一句:header("HTTP/1.1 200 OK");

据说去掉后也不影响SEO,具体的我也不清楚,望以后能有高人解释。

注意:postname不能太长,否则无法正常显示单篇日志。

请自行将代码中的全角字符更改为半角字符!~


点击这里查看txt版本
请自行另存为php文件

相关日志

Back Top

Responses to “WordPress永久链接Windows/IIS下静态化去index.php方法”

  1. Warning: preg_match() [function.preg-match]: Unknown modifier '/' in F:\websites\www\blog\wp-404-handler.php on line 6
    正规表达式不能用?

  2. # $pattern = '/[^;]+;[^:]+:\/\/[^\/]+(\/[^\?]*)(?:\?(.*))?/i';

    • wp会将半角引号自动转换成全角的,所以要手动将它改过来才行。
      如果还是有问题,可以留下邮箱,我将404.php发给你,
      或者参照这篇文章http://www.imwls.com/404-wordpress-permalink-tolower-url/ :smile:

  3. 把一个简单的问题搞的这么复杂,404定向会对引擎有影响的

    • IIS下目前最好的办法就是使用404,Google Site:www.imwls.com,你会发现搜索引擎对页面收录没有任何影响,包括其它蜘蛛/爬虫在内,呵呵 :idea:

  4. 能交流下wordpress下永久链接的设置吗
    希望得到你的帮助,QQ: 249183165

  5. 我用了这种办法,还是去不了index.php,去了以后打不开网站,这是怎么回事能,请高手赐教!

    • 我上面的代码里有全角字符,需要转成半角字符,而且链接里不能含有中文(如果需要支持中文,请看“IIS下配置WordPress永久链接支持中文完美版”),如果实在不知道怎么弄话请留下邮箱,我会将404.php和classes.php发给你;最简单的解决方法是更新到wordpress2.9 beta1,程序原生支持IIS的伪静态。

  6. 你好,能麻烦您将您的404.php文件发给我吗? 我的邮箱390888451@qq.com 谢谢您了

  7. 凤飞飞 :

    你好,能麻烦您将您的404.php文件发给我吗? 我的邮箱390888451@qq.com 谢谢您了

    已发,请查收!

  8. 不错的站,路过看下

  9. Warning: preg_match() [function.preg-match]: Unknown modifier '/' in D:\wwwroot\404.php on line 6

    ..麻烦你发给我一份 404.php好么? 非常感谢!d10000d10000@126.com

    你好呵呵哦 CHINA Internet Explorer Windows at January 24, 2010 11:55 AM
  10. 太感谢了 已经ok了
    博主人真好!我收藏您的博客了

    你好呵呵哦 CHINA Internet Explorer Windows at January 24, 2010 12:08 PM
  11. @你好呵呵哦 ;-) 客气了。

  12. 很详细的介绍,用WP建站,不如选LINUX主机为好

  13. 我的index.php无论怎样都去不掉,请帮下忙,或者给发份404.php,究竟是404.php,还是wp-404-handler.php,麻烦了,邮箱250601354@qq.com

  14. @Xqiang 对不起啊,是我写错了,应该是在主机控制面板里指向404.php,404代码请看这http://www.imwls.com/wp-content/uploads/404.txt,保存为utf-8格式。

  1. 木公博客 » IIS下配置WordPress永久链接支持中文完美版 CHINA WordPress (,February 17, 2009)

    [...] 前面提到过相关方法http://www.imwls.com/wordpress-iis-cut-index/但是今天在用站长工具查询博客中死链时发现,所有的中文Tag页面均是跳转到我的主题404页面,Google了之后,终于找到一个解决的办法,贴出来分享,让更多在Windows主机下挣扎的同胞们玩好WordPress。 [...]

  2. IIS下配置WordPress永久链接支持中文完美版 - 科技热 AUSTRALIA WordPress (,June 21, 2010)

    ◎ 這是 Pingback/Trackback, 小牆懷疑這可能是 Spam!
    [...] 前面提到过相关方法http://www.imwls.com/wordpress-iis-cut-index/但是今天在用站长工具查询博客中死链时发现,所有的中文Tag页面均是跳转到我的主题404页面,Google了之后,终于找到一个解决的办法,贴出来分享,让更多在Windows主机下挣扎的同胞们玩好WordPress。 [...]

Leave a Reply

Back Top