2011-08-26 112 views
0

我在我的web.config以下重寫規則這是工作的罰款強制使用HTTPS如果登錄asp.net

<rule name="RedirectToHttps" stopProcessing="true"> 
    <match url="(.*)"> 
     <conditions> 
      <add input="{HTTPS}" pattern="off" /> 
     </conditions> 
    <action type="Redirect" url="https://example.com/{R:1}" redirectType="SeeOther" /> 
</rule> 

現在的問題是,我只希望這個規則適用於已登錄的用戶,有什麼辦法可以在web.config中做到這一點?如果沒有其他方法可以做到這一點?

在此先感謝

回答

1

我覺得這是不可能的IIS URL重寫模塊,因爲它涉及到採取行動的請求已經被驗證了。

你可以,但是,保留一個子目錄,以您的身份登錄的用戶,例如〜/會員/,並迫使URL重寫模塊來重定向這個路徑HTTPS等同的HTTP請求:

<rule name="RedirectToHttps" stopProcessing="true"> 
    <match url="(.*)"> 
     <conditions> 
      <add input="{HTTPS}" pattern="off" /> 
      <add input="{REQUEST_URI}" pattern="/Members/.*" /> 
     </conditions> 
    <action type="Redirect" url="https://example.com/{R:1}" redirectType="SeeOther" /> 
</rule> 

或者,你可以很容易地在您的Global.asax /應用類手動執行檢查:

void Application_AuthenticateRequest(object sender, EventArgs e) 
{ 
    // Check if the conditions are satisfied 

    if (Request.IsAuthenticated && !Request.IsSecureConnection) 
    { 
     UriBuilder uri = new UriBuilder(Request.Url); 
     uri.Scheme = Uri.UriSchemeHttps; 

     // Perform the redirect to the HTTPS equivalent 

     Response.Redirect(uri.ToString()); 
    } 
} 
+0

謝謝。只是一個問題,當它重新定向時,它會添加:80到主機的末端,即site.local:80/something.aspx我在本地機器上使用它。有什麼建議麼? – Peuge