2012-01-16 90 views
0

我已經拆分了子域之間的一些頁面,並希望在某些情況下對不同子域上的不同頁面進行URL重寫。除了文件中的最後兩條規則之外,一切都是重寫規則。最後兩條規則確定哪個子域用於路由我固定的路徑。IIS7.5 URL重寫正則表達式匹配,當它不應該

我這樣做的方式是,如果我在前面加上下劃線(_)的路徑,然後它停留在子域A.如果我在前面加上一個符號(〜)的路徑,然後它會被重定向到子域B.

所以我有這樣的規則:

<rule name="Login rule" stopProcessing="false"> 
     <match url="(.*?)/?old-path/Login\.aspx$" /> 
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
      <add input="{HTTP_METHOD}" pattern="GET" /> 
     </conditions> 
     <action type="Rewrite" url="~new-path/login.aspx" /> 
    </rule> 

請注意沒有對URL的末尾一個aspx。它繼續處理,但是在重定向之前,我在列表末尾有一個通用重寫規則。這是爲了去除子域A(WWW)的所有ASPX擴展,但我想離開ASPX擴展子站點B(請不要建議刪除建議的2號子域。謝謝:)

<rule name="Remove ASPX" stopProcessing="false"> 
     <match url="^([^www\.]+)\.aspx$" /> 
     <conditions> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="_{R:1}" /> 
    </rule> 

的問題是,這是行不通的,因爲所有的URL在開頭都有www。我對正則表達式並不擅長,但我猜測我只需要將此規則應用於所有包含波形符號的網址。我想這一點,但它不是真正的工作之一:

<match url="^_+\.aspx$" /> 

基本上我想這個規則忽略我已經重寫,以在他們身上有~的URL,但去掉ASPX,如果我把_在開始路徑。

有什麼建議嗎?

回答

1

如果我理解你的問題,那麼你有URL:「〜新路徑/ login.aspx」,你想重定向到「〜新路徑/登錄」,對不對?
那麼你的正則表達式應該是這樣的:

^(.*~.*)\.aspx$ 

注:「www」的是域名的一部分,而不是納入匹配。
因此,如果您的完整URL是「http://www.mysite.com/~new-path/login.aspx」,那麼只有「〜new-path/login.aspx」部分將參與正則表達式匹配。

而且模板{R:1}將包含在第一組(括號)值:「〜新的路徑/登錄」

+0

它實際上是'_',我想重定向。但是我把你的建議改爲'^(。* _。*)\。aspx $',並且測試網址匹配了!謝謝。 – Nathan 2012-01-16 17:32:23