2013-10-22 23 views
1

我有一個站點和託管在同一臺服務器上的站點的測試版本。我希望實時版本使用ssl,但不是測試版本。我用下面的代碼來執行SSL活,而不是爲了測試:對某些站點執行ssl,但對另一個站點不執行

If HttpContext.Current.Request.IsSecureConnection.Equals(False) AndAlso HttpContext.Current.Request.IsLocal.Equals(False) AndAlso HttpContext.Current.Request.RawUrl.Contains("test.mydomain.com") = False Then 

      Response.Redirect("https://" + Request.ServerVariables("HTTP_HOST") + HttpContext.Current.Request.RawUrl) 
     End If 

該網站的真人版是live.mydomain.com

結果我得到的是,要test.mydomain.com任何請求轉到live.mydomain.com。我不知道這是如何可能的。瀏覽器實際在地址欄中顯示test.mydomain.com,但顯然使用了實時版本。對於test.mydomain.com沒有SSL綁定。我花了幾天的時間想知道是否有人知道我的代碼有什麼問題,或者我可以嘗試什麼。

許多在此先感謝

回答

3

您可以在IIS中做到這一點(沒有在應用程序中的任何代碼)通過改寫使用IIS7 URL Rewrite module的URL。

這是這種事情一個真正有用的資源:http://ruslany.net/2009/04/10-url-rewriting-tips-and-tricks/

你想要做的是組合(3)和(4)。

所以它說如果請求沒有進入HTTPS並且主機名爲live.domain.com,那麼重定向到HTTPS。

事情是這樣的:

<rule name="Redirect to HTTPS" stopProcessing="true"> 
  <match url="(.*)" /> 
  <conditions> 
    <add input="{HTTPS}" pattern="^OFF$" /> 
    <add input="{HTTP_HOST}" negate="true" pattern="live\.mydomain\.com$" /> 
  </conditions> 
  <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /> 
</rule> 
+0

嗨Dommer,這看起來像這樣做的更好的方法。我會盡快測試並報告。我有一個問題,但我不想使用ssl進行本地開發。規則中的哪些部分是被照顧的?非常感謝M –

+0

在規則中,如果URL是'live.mydomain.com',它只會重定向 - 如果我已經正確寫入;-)。即使我犯了一個錯誤,這應該足以讓你自己解決。我想當你在做本地開發時,它會是'localhost'不是嗎? –

+1

很好用。非常感謝 –

相關問題