在iis下添加php支持并启用rewrite后的问题

最近想把php网站从Linux服务器搬到Windows服务器下,因为Windows服务器已安装IIS,80端口被占用,无法安装Apache,所以只能往IIS添加php支持。

系统是Windows Server 2003,IIS为6.0,添加php支持百度一下一大堆,按照教程来,没问题,唯一要注意的是文件夹的权限问题。

因为这个php网站要使用apache的rewrite功能,IIS没有这个功能,搜索了下,发现有个ISAPI_Rewrite的插件,支持Apache的.htaccess文件,语法基本一致,所以就是它了。

下载安装,没什么问题,但是使用的时候,发现总取不到正确的值,经测试发现,url上被自动添加了/eurl.axd/GUID这样的字符串,导致了正则匹配出错了。这个是ASP.NET 4.0添加的,网上的解释是:

ASP.NET 4.0在安装的时候,会在IIS6注册一个ISAPI Filter,叫做”aspnet_filter.dll”,ISAPI Filter会先于ISAPI处理程序前执行,它会在所有的的无后缀的URL后面加一串字符“/eurl.axd/GUID”, 同时ASP.NET 4.0还会在IIS默认添加一个请求映射规则“*.axd”,映射到aspnet_isapi.dll。此时,所有的无后缀URL加上“/eurl.axd/GUID”后都会变成带.axd后缀,这样就匹配*.axd的映射规则进行ASP.NET的处理通道。在进入ASP.NET通道后,ASP.NET处理程序会删除掉“/eurl.axd/GUID”,让它还原到无后缀的原始情况,并且不会对后续的请求处理带来任何影响。此时,所有的无后缀请求,就进入了ASP.NET的处理通道中。

解决办法也很简单,打开iis管理器,在网站上右击→属性→ISAPI筛选器,删除 ASP.NET_4.0.30319.0 这条记录,然后在你的ASP.NET 4.0网站上,右击→属性→ISAPI筛选器,添加一条记录,名称为ASP.NET_4.0.30319.0,路径为 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll,点确定保存后,就可以了。