三天前(27号)在宽元买了自己的空间,不过是Win主机,又是IIS环境。因为是第一次购买空间,买前对这些东西也没有做太多了解,只是因为朋友enjoyd.com站长的推荐,他买了这款空间,我就跟着也买了。 但买回来以后,却遇到了很大的麻烦。 首先是我的FTP软件cuteFTP无法顺利使用,建立好FTP站点,点击连接之后,软件总是停留在FEAT命令不动,持续到大概软件默认的6000秒超时以后,提示连接中断。每次都是如此,也不知道究竟是什么原因。要知道,我连接其他的FTP站点时,可都是没有出现任何错误,十分顺利和正常的。可也没有办法,终于,后来在网上仔细搜索了很久,修改了软件的一个设置,算是成功连上了。 修改的设置如下:在软件的全局选项对话框中,找到连接选项,在对话框右侧的连接选项的设置中,取消选择“登录到确定功能支持之后发送FEAT命令”。应该是空间对FEAT这个FTP命令支持的不是太好,或者是因为我是使用代理上网的原因吧。不过总算是解决了这个问题,可以顺利地使用FTP软件了。 第二个问题是我备份的51blog数据库无法成功导入到空间提供的数据库中,总是提示wp_comments表导入错误,貌似是因为有重复的键值,但错误代码我已经记不清楚了。后来在宽元技术支持的帮助下,算是成功导入了。数据库以及其中的内容也都没有了任何问题,网站使用也完全正常了。 可遗憾的是,正在我暗自高兴搬家终于成功了的时候,结果发现我在原来空间上自定义的永久连接(形如:https://www.yueye.org/2008/move-from-linux-win-host.html)不能使用。除了站点主页可以正常打开外,其他的如文章页面,分类页面,标签页面等等,全部不能打开。仔细考虑了一下,心想应该是因为原来在国外免费空间上是Linux主机,即所谓的LAMP主机,在LAMP主机上实现这样的链接是十分简单的事儿,只需空间支持.htaccess,然后上传经典的.htaccess文件并修改权限为777即可直接设置了;但现在却不是那么容易的事情了,搬回的国内的空间,应该是Win主机,问了一下客服,果然如此。于是就在Google上搜“Win主机 WordPress 伪静态”,一个个仔细地查看搜索结果,发现方法无外乎这样几种:
1.无Rewrite模块,不使用cos-html-cache插件:
此方法使用的是404错误页转向的特性,修改一下空间的404.php文件,将404错误页面指向该文件,即可成功实现伪静态。404.php文件的内容如下:
<?php header(“HTTP/1.1 200 OK”); $ori_qs = $_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’); ?>
但我因为我的空间可以支持一个文件夹绑定域名,而我的博客正是放在空间的该子文件夹下面的,似乎这个文件夹和根目录没有什么关系,所以设置的404页面并不能成功指向。后来我让客服把子文件夹的404页面帮我指向子文件夹中的404.php,结果更怪的事儿出现了,系统竟然把文件的内容像普通的文本文件一样直接显示了出来,而没有对其进行解释执行。我很无奈,求助客服,搞了很久也没有搞出来个所以然来。无奈,只好放弃这种方法。
2.无Rewrite模块,使用cos-html-cache插件:
这种方法就是在WordPress上安装一个cos-html-cache插件,但我仔细看了下发现,只是生成了静态页面,并没有实现我们所说的伪静态。我仔细考虑了一下,应该有部分原因是404页面不能解释执行的缘故吧。既然不能实现真正的伪静态,自然让人感觉十分不爽,于是,只好又放弃了这种方法。
3.启用Rewrite模块,使用ISAPI Rewrite组件wp-url-rewriting.dll:
此法详见一位网友的Wordpress在Win-iis中的完美rewrite实现方法一文,但很遗憾的是,按照他的方法,我进行了详细的设置,而且又让空间商的技术支持帮忙启用了Rewrite模块,加载了ISAPI Rewrite组件wp-url-rewriting.dll,可终究还是没有成功,伪静态仍然未能实现。 而且,就在我搜索其他方法的时候,技术支持又和我说加载ISAPI Rewrite组件wp-url-rewriting.dll之后,会对其他人的网站有影响,必须卸载。卸载就卸载吧,反正这种方法也行不通。
4.启用Rewrite模块,修改httpd.ini规则:
该法相见网友文章:解决wordpress ISAPI网页静态化。这种方法不需要多余的步骤,只要空间商启用了Rewrite模块,我们自己再在网站的根目录上上传一个httpd.ini文件即可,点击此处下载该文件。 httpd.in文件是一个Rewrite规则,该规则如下:
[ISAPI_Rewrite] # Defend your computer from some worm attacks #RewriteRule .*(?:global.asa|default\.ida|root\.exe|\.\.).* . [F,I,O] # 3600 = 1 hour CacheClockRate 3600 RepeatLimit 32 # Protect httpd.ini and httpd.parse.errors files # from accessing through HTTP # Rules to ensure that normal content gets through RewriteRule /software-files/(.*) /software-files/$1 [L] RewriteRule /images/(.*) /images/$1 [L] RewriteRule /sitemap.xml /sitemap.xml [L] RewriteRule /favicon.ico /favicon.ico [L] # For file-based wordpress content (i.e. theme), admin, etc. RewriteRule /wp-(.*) /wp-$1 [L] # For normal wordpress content, via index.php RewriteRule ^/$ /index.php [L] RewriteRule /(.*) /index.php/$1 [L]
启用模块,把下载的httpd.ini文件上传到网站的根目录,困扰我长达3天,让我茶不思饭不想,觉都睡不着的伪静态问题终于解决了。
所以,现在,我高兴的宣布,在经过宽元刘哥、宽元技术支持的汪先生、王先生的帮助之后,我终于在Win主机IIS环境下成功的实现了WordPress的伪静态!而且这种伪静态是我一直以来十分喜欢的形式,在链接中没有讨厌的index.php,对搜索引擎也没有什么影响。我做到了!你呢?你实现了自己的WordPress的伪静态了吗?