2010-03-16 46 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