美工学习 发表于 2023-11-30 21:30:06

ISAPI Rewrite/IIS Rewrite无效的原因分析

对SEO的追求有点强迫的症状了。于是用上了ISAPI Rewrite,ISAPI_Rewrite是一个强大的基于正则表达式的URL处理引擎,我安装的是官方的ISAPI_Rewrite3_0058_Lite.msi 免费版。免费版与收费版的主要区别是:“No support for distributed .htaccess configurations, directory and web site level configurations. Only one global httpd.conf configuration file will be loaded from Lite version installation folder.”

安装运行后,打开管理工具中Internet信息管理(IIS管理),在网站单击右键选属性,就可以看到ISAPI_Rewrite已经被加入到了ISAPI筛选器中。

按照默认安装的位置,可以在 C:/Program Files/Helicon/ISAPI_Rewrite 找到 httpd.ini 在此文件中输入Rewrite的规则即可。

正常情况下,修改rewrite规则不需要重起IIS,在为Apache编写的Rewrite的规则中,通常把

<IfModule mod_rewrite.c>

RewriteEngine On RewriteRule ^(.*)/archiver/(+/.html)$ $1/archiver/index.php?$2 </IfModule>其中黑体的部分去掉即可成为ISAPI Rewrite的规则。

但在我的服务器上,调试了很久都调试不出来效果,不清楚到底有无加载这个筛选器,于是我在虚拟机上又试了试。一次便试验成功了,证明是我的服务器其他地方的配置问题,看到IIS下安装配置ISAPI Rewrite,实现asp的静态化的一句话:“默认是装在C:/Program Files/Helicon下,要注意的是这个目录everyone要有读取权限。”才恍然大悟。

因为对系统盘的权限设置过分严格,所以导致新安装的组件都没有everyone权限,包括这里的Helicon文件夹,所以无法正常运行ISAPI Rewrite。但我添加了everyone的读取权限以后,URL Rewrite仍旧没有生效,又找了很多原因,直到最后只重启了一下变成功了。原来更改了组件的权限之后需要重启IIS。现在总结下:

ISAPI Rewrite无效/ISAPI Rewriterule无效的几个可能原因:

1、最可能的原因:C:/Program Files/Helicon没有开放everyone组的读取权限。

2、其次可能原因:C:/Program Files/Helicon已经开放everyone组的读取权限,但没有重启IIS。

3、不可能的原因1:虽然URL Rewrite功能看起来像是新建了目录,但实际上网站程序所在目录对于everyone组只要有普通的读取权限,并不需要有写权限。只要网站能被访问就不是这个网站权限设置的问题。

4、不可能的原因2:不需要像网上那么多的教程那样在IIS中做其他设置(在每个站点都添加了ISAPI Rewrite的ISAPI筛选器,对于这个免费版,安装完即可在也只能在全局范围内生效。所以不需要对每个站点进行设置。

改了权限后,必须在服务里重启一下IIS服务。但我在虚拟机里面没有任何重启操作(安装完后应该有一次自动的重启)。怎样判断何时重启呢?我有个粗略的方法,IIS对于是否要重启的策略可能是这样:对组件访问权限的更改,要在重启后才能生效;而对组件配置的更改(如httpd.conf)则不需要重启即可生效。在我的虚拟机中刚安装后ISAPI Rewrite程序目录的设置和权限就已经是足够开放的了,而且之后没有更改过权限,所以才不需要重启。大家分析下


页: [1]
查看完整版本: ISAPI Rewrite/IIS Rewrite无效的原因分析