记录下IIS Rewrite的囧事

今晚因某项目开发需要,使用的是ThinkPHP框架,采用单一入口模式,入口为index.php,使用IIS Rewrite伪静态去掉了index.php/

但是由于此项目需对接ucenter, ucenter又放在该网站同级的目录,而且API必须独立写个uc.php(我懒而已,真的想的话集成也木有问题),因此需要把uc目录和api目录独立出来。

重写一下问题所在:网站使用的是index.php作为入口,用Rewrite隐藏index.php,也就是/xxx=/index.php/xxx酱紫。知道了问题接下来就需要解决,不废话了直接放出语法:

RewriteRule /uc/(.*) /uc/$1 [I,L]
RewriteRule /api/(.*) /api/$1 [I,L]
RewriteRule /(.*) /index.php/$1 [I,L]

《ISAPI_Rewrite documentation》这个文档看得我各种纠结啊,问题其实就在1.Syntax: RewriteCond TestVerb CondPattern [Flags]我在这个命令上纠结了半天……结果整理了思路才发现这玩意儿不能解决问题,好我继续,放弃这个。

2.Syntax: RewriteRule Pattern FormatString [Flags]
这个的Flags我更纠结了,居然漏看

L (l ast rule)
Stop the rewriting process here and don't apply any more rewriting rules. Use this flag to prevent the currently rewritten URI from being rewritten further by following rules.

OK我承认我理解能力比较弱,在看到国人翻译的一份比较新的文档时候才发现漏看了,我在大概扫一眼的时候是看有没有过滤用途的,结果发现我真NC...在匹配的时候如果用了[L]匹配成功之后接下来的不会执行,试了下果然大丈夫...

【手工恢复博文系列,这时候刚使用框架吧,还不是很熟练的样子。发布日期是2011年6月21日】

记录下IIS Rewrite的囧事 没有评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据