前不久又从lamp换成wimp(windows2k3+iis6+mysql5.2+php5.2),wordpress丧失了两个重要功能:
一个是永久链接(静态化),一个是邮件发送。
现在刚刚完美解决了永久链接的问题,分享方法。
(所谓永久链接(permalink),就是像http://www.flashj.cn/wp/wimp-wordpress-permalink.html这样的格式)
因为windows下不支持.htaccess,所以要想rewrite,需要下载一个ISAPI_Rewrite组件来实现rewrite。我试过,个人感觉效果并不理想。
网上看到一则巧妙的配合404页面实现永久链接的方法,嫁接过来感觉还不错。
原理就是:写一个404.php文件,把请求转到wordpress的index.php。
现在普遍流传的一个版本是:
1.创建一个PHP文件,内容如下:
1 2 3 4 5 6 |
<?php $qs = $_SERVER['QUERY_STRING']; $_SERVER['REQUEST_URI'] = substr($qs, strpos($qs, ‘:80′)+3); $_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI']; include(’index.php’); ?> |
保存为404.php
2.将此404.php文件放到wordpress根目录下
3.设置IIS的404页面到wordpress根目录下的404.php
4.到wordpress管理后台开启permalink
也就是说404.php起到了rewrite的作用。
不过在实施的时候我遇到两个问题:
1.子目录
经常看我博客的朋友应该知道,我的域名flashj.cn,引导页是www.flashj.cn,而我真正的wordpress博客程序有两个,分别在www.flashj.cn/wp和www.flashj.cn/personalblog两个目录中,所以不能像一些独立站点的朋友那样直接设置站点的404文件。
2.中文乱码
因为中文WIN2k3上IIS6试用的是GBK编码,而wordpress是UTF-8编码的,所以在永久链接中存在的中文字符,会使wordpress无法识别。
经过我的“改良”,现在已经成功实现静态化,方法如下:
1.php.ini开启extension=php_mbstring.dll的支持(一般都开的)
2.写这么一个404.php
1 2 3 4 5 6 |
<?php $qs = $_SERVER['QUERY_STRING']; $_SERVER['REQUEST_URI'] = mb_convert_encoding(mb_substr($qs, strpos($qs, ':80')+3), "UTF-8", "GBK"); $_SERVER['PATH_INFO'] = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK"); include('index.php'); ?> |
只是在网上普遍流传的版本上加上中文转码,把IIS的GBK转成wordpress需要的UTF8。
3.将此404.php文件放到/wp和/personal目录下(两个wordpress目录各一个)
4.IIS中,子目录创建应用程序:
打开IIS管理器,切到flashj.cn站点,把子目录/wp和/personalblog创建应用程序。
例如:打开”站点/wp”这个子目录的属性,在“目录”选项卡中下方的“应用程序设置”区域点“创建”应用程序。
这样子目录已经可以设置独立的错误页面了。
5.设置IIS的404页面:
接着第四步,切换到“自定义错误”选项卡下设置404页面。
这里的要点是,修改404的设置为:
消息类型为URL,
URL为/子目录名/404.php(如我的是/wp/404.php)
6.到wordpress管理后台开启permalink
7.在本文末尾留言冒个泡吧,庆祝成功
我继续去看看邮件功能要怎么搞……
不错。迄今看到总结最全面的,站长有心了。感谢!