2010-03-16 49 views
4

如果url没有扩展名,我有以下重写规则来追加.aspx扩展名。IIS7的URL重写模块中的正则表达式

 <rule name="SimpleRewrite" stopProcessing="true"> 
     <match url="^(.*(?&lt;=/)([^/.]*))$" /> 
     <action type="Rewrite" url="{R:1}.aspx" /> 
    </rule> 

但是规则不工作:

Error HTTP 500.52 - URL Rewrite Module Error. 
The expression "^(.*(?<=/)([^/.]*))$" has an invalid syntax. 

然而,这正则表达式工作在.NET。 IIS Url重写模块支持哪些正则表达式?如何做出积极的lookbehind断言?

+0

你能解释,为什么你有这样的为扩展请求添加.aspx的复杂规则?这部分(?< = /)是什么? – TonyCool 2010-03-17 10:09:09

+0

也许它太复杂:),但我怎么检查它是否没有扩展名? – 2010-03-17 10:59:32

回答

2

或许.*/[^/.]+$会满足您的需求吗?重写也只是“{R:0}的.aspx”

编辑(响应评论):如果要包括简单的文件名,你可以写

^(.*/)?[^/.]+$ 
+0

Thx,我发现我的正则表达式是有效的,但不正确,最后我以'^。*/[^ /。] + $ |^[^ /。] + $'结束。 – 2010-03-18 12:19:36

1

这听起来像是可能有一个更简单的解决方案来解决您的问题,不需要正则表达式,但如果没有,这可能会有所帮助。

快速:对于复杂的常规表达式,请尝试使用模块重写克隆IIS插件,如ISAPI_Rewrite Lite

长:一年多前,我做了Drupal站点的ISS部署,在所有的小学,中学,我相信第三环节是由Drupal的处理,但更深层次的传统内容本来是要被视为正常(而不是被Drupal 404接管)。

我们使用了ISAPI_Rewrite 3,Apache的mod_rewrite的一个“端口”(兼容语法)来执行遗留内容和drupal之间的指令,并使用一系列Rewrite过滤器和规则来检查任何与URL中的URL匹配的内容在让Drupal处理剩下的文件之前,请使用传统文件夹。

http://www.helicontech.com/isapi_rewrite/

的ISAPI_Rewrite精简版是免费的,并有我需要的所有功能。此外,您可以购物,Helicon并不是唯一一家为IIS创建Mod重写克隆插件的公司。

+0

也谢谢你,我已经简化了表达式,所以IIS URL重写模块对我来说已经足够了。 – 2010-03-18 12:24:14