随着越来越多云主机或者 VPS 普及 Windows 2008 或者 Windows 2008 R2,IIS 7.0 或 IIS 7.5 的时代就来到了。本文以 Windows 2008 R2 为例,讲述如何把 Windows 2003 下 IIS 6.0 的 Rewrite 组件完美迁移到 Windows 2008 R2 当中。
Windows 2008 R2 默认只有 64 位的,但是内置了支持 32 位的功能,就是说几乎所有在 32 位下能正常运行的软件都能正常运行在 Windows 2008 R2 当中,故不必担心 PHP 5.2.17 这个版本支持或不支持了。另外,有点需要注意的,Windows 2008 R2 下,IIS 版本是 7.5,添加是在服务器管理面板中的「角色」,非「功能」哦,这点在刚接触 2008 R2 会有找不到……
IIS7.0 开始就变成模块化了,需要什么就安装什么,当然也包括 ASP 支持,咱们用来运行 PHP 就把 CGI 也勾上。到时安装 PHP 的时候,就不用安装 FastCGI 了,因为已经内置了,这是跟 Windows 2003 不同的。
直奔主题吧,我们在 Windows 2003 下使用 Rewrite 组件,一般都有对应的 httpd.ini 规则包,在 Apache 下,则对应有.htaccess 规则包。网上有不少方法让我们使用 IIS 7.5 的 ULR Rewrite 模块来进行导入原来的规则,导入的规则会在网站根目录生成 web.config 文件,里面保存的是根据导入生成的新规则,由于种种原因,导入的规则语法未必会 100% 能让 IIS 7.5 这个重写模块识别,导致导入的规则运行时候发生各种提示,包括无法生效,HTTP 500 内部错误等等。
那有没有办法直接使用原来 Windows 2003 的伪静态规则包呢,答案是肯定的,Windows 2008 R2 做的兼容性更高,没有 Windows 2003 莫名其妙的向上向下箭头,权限是一次性配置到位的。
在 Windows 2008 R2 的 IIS 7.5 的站点面板中,有个「ISAPI 筛选器」模块,这个就是 Windows 2003 加载 Rewrite 组件的地方,接下来,你应该明白怎样加载了吧,同样道理,在这里把 Rewrite.dll 作为运行文件,加载到 ISAPI 筛选器,拿 KingCMS 地方门户 v2.2 举例,ISAPI 筛选器 Rewrite.dll 会自动读取旁边的 httpd.ini 规则包。
一般而言,没实操过的教程就到此结束了,但是在实际操作当中,这样加载了 Rewrite 组件,还是无法生效。其实,原因也很明确,因为 Windows 2008 R2 是 64 位的,我们直接用在 Windows 2003 的 Rewrite 组件是 32 位的,所以要找到 IIS 7.5 加载的 Rewrite 组件如何在设置为 32 位兼容模式,经过狂点式搜查,终于在应用池那里找到了设置:

把启用 32 位应用程序设置为 True,然后再试试看。伪静态是不是生效了。