二、IIS环境下的URL rewrite:
在windows主机IIS环境下,主机不支持mod_rewrite,有人在IIS7下测试过,WordPress有内建的url rewrite模块支持IIS7 。IIS 6 等的url rewrite可以有以下几种解决办法。
1. 第一种方法,可以在WordPress管理控制后台设置 http://example.com/index.php/年/月/日/日志名/ 这种形式的URL 重写。这里的index.php不能去掉(请看下面第三大点)。
2. 用ISAPI 实现url Rewrite
ISAPI 是英文“ Internet server application programming interface 的缩写,字面的翻译为:英特网服务器应用编程接口。实际上,ISAPI是微软为了扩展其主打WEB服务器产品IIS,为高级编程人员提供的一项特定技术,使得编程人员可以在服务器级上使用底层的API(应用编程接口)编程,扩展IIS功能。编写良好的ISAPI差不多可以接替IIS的全部工作,按照程序设计者的意图完成WEB应用。ISAPI编程与目前流行的其它web开发方式比较,其优势在于:性能、安全、全功能等方面。不少权威机构做过评测,ISAPI在各项指标上均领先于NSAPI(网景提供的一项服务器应用接口技术),与目前被大量使用的web开发脚本语言,比如ASP,PHP,JSP等比较,根本不在一个数量级。对于程序员来说,直接使用“应用编程接口是一件令人兴奋的事情。在GInfo虚拟网站平台上开发网站,与“高效等义。
ISAPI可用于支持URL rewrite(Url重写)。我们可以自己将相关的dll文件上传至指定目录,并点击添加 ISAPI筛选器 即可生效。理论上ISAPI可以支持任何系统的url rewrite,同时可以扩展支持其他isapi筛选功能。
具体操作时,创建httpd.ini文件或修改httpd.ini的内容,自定义RewriteRule的规则,然后上传到指定目录就可以了(注:以下RewriteRule重写规则根据WordPress版本和url重写方式的不同而有所不同,做些相应的改动即可):
[ISAPI_Rewrite] # WordPress rewrite rules # /%year%%monthnum%%day%/%postname%/ RewriteRule /tag/(.*) /index\.php\?tag=$1 RewriteRule /(about-me)/ /index.php\?pagename=$1 RewriteRule /category/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed.php\?category_name=$1&feed=$2 RewriteRule /category/?(.*)/ /index.php\?category_name=$1 RewriteRule /author/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed.php\?author_name=$1&feed=$2 RewriteRule /author/?(.*) /index.php\?author_name=$1 RewriteRule /feed/?$ /wp-feed\.php/\?feed=rss2 RewriteRule /comments/feed/?$ /wp-feed\.php/\?feed=comments-rss2 RewriteRule /page/(.*)/ /index.php\?paged=$1 RewriteRule /([0-9]{4})([0-9]{1,2})([0-9]{1,2})/([^/]+)/?([0-9]+)?/?$ /index\.php\?year=$1&monthnum=$2&day=$3&name=$4&page=$5 RewriteRule /([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index\.php\?year=$1&monthnum=$2&day=$3&page=$4 RewriteRule /([0-9]{4})/([0-9]{1,2})/?$ /index\.php\?year=$1&monthnum=$2&page=$3 RewriteRule /([0-9]{4})([0-9]{1,2})([0-9]{1,2})/([^/]+)/(feed|rdf|rss|rss2|atom)/?$ /index\.php\?year=$1&monthnum=$2&day=$3&name=$4&feed=$5 RewriteRule /([0-9]{4})([0-9]{1,2})([0-9]{1,2})/([^/]+)/trackback/?$ /wp-trackback.php\?year=$1&monthnum=$2&day=$3&name=$4&tb=1
3. IIS 下用404页面实现url 重写
新建一个wp-404.php文件,写入下面的代码,然后上传到服务器根目录上:
<?php $qs = $_SERVER['QUERY_STRING']; $pos = strrpos($qs, '://'); $pos = strpos($qs, '/', $pos + 4); $_SERVER['REQUEST_URI'] = substr($qs, $pos); $_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI']; include('index.php'); ?>
然后通过虚拟主机管理后台软件把404页面指向wp-404.php。最后去WordPress后台,设置一下Permalink(请看下面第三大点),刷新一下首页,URL rewrite就可以正常工作了。在Windows 2003 + IIS6.0下试验成功。我觉得一些Linux主机,如果不支持.htaccess的话,也可以使用这种办法进行URL重写。有一个问题是不支持中文,postname和tag最好是英文的,中文的tag可以去设置一下tag slug。不过很多人怀疑用404页面设置url rewrite 会使404页面设置不能正常发送404 HTTP header,因此这种方法不建议使用。