2008-09-05 46 views
137

Có cách nào để chuyển hướng tất cả các nỗ lực chuyển sang phiên bản HTTP: // của trang web sang HTTPS: // tương đương không?IIS7: HTTP-> HTTPS Sạch

+0

trả lời có thể được tìm thấy trên blog của James Kovac của: http://jameskovacs.com/2007/05/09/how-to-autoredirect-to-a-sslsecured-site- in-iis/ – cpuguru

+0

Nếu bạn đang sử dụng IIS 7 và R2 [ở đây] (http://www.jppinto.com/2010/03/automatically-redirect-http-requests-to-https-on-iis7-using- url-rewrite-2-0 /) là một hướng dẫn hoạt động và "sạch" nhất –

Trả lời

173

Tôi nghĩ cách sạch nhất như được mô tả here on IIS-aid.com. Đó là web.config chỉ và vì vậy nếu bạn thay đổi máy chủ, bạn không cần phải nhớ tất cả các bước bạn đã đi qua với trang lỗi tùy chỉnh 403.4 hoặc các quyền đặc biệt khác, nó chỉ hoạt động.

<configuration> 
    <system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="HTTP to HTTPS redirect" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions> 
       <add input="{HTTPS}" pattern="off" ignoreCase="true" /> 
      </conditions> 
      <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
</configuration> 
+4

Điều này hoạt động hoàn hảo và điểm thưởng hoàn toàn độc lập, do đó bạn không phải tạo trang web mới như được nêu trong câu trả lời được chấp nhận – WickyNilliams

+1

Điều này có thể kích hoạt tất cả các URL không phụ thuộc vào loại tệp hay không. ví dụ. URL trực tiếp đến tệp txt? – Cheekysoft

+9

Điều này làm việc cho tôi ngoại trừ việc tôi phải sửa đổi URL chuyển hướng thành https: // {HTTP_HOST} {REQUEST_URI} –

-4

Tôi nghĩ bằng cách 'làm sạch' bạn có nghĩa là giống như với chuyển hướng 300. Định cấu hình cho nhiều máy chủ & ngôn ngữ here.

5

Cách sạch sẽ chỉ thay đổi lược đồ URL từ http -> https và để mọi thứ khác tương đương. Nó phải là phía máy chủ để không có vấn đề trình duyệt.

JPPinto.com có ​​Step-By-Step instructions về cách thực hiện việc này, ngoại trừ việc họ sử dụng javascript (HttpRedirect.htm) thay vì chuyển hướng phía máy chủ. Vì một lý do nào đó, tôi không thể chạy IE nếu javascript có 'Hiển thị thông báo lỗi HTTP thân thiện' được bật theo mặc định. Một điều khác với kịch bản là chuyển hướng đến đường dẫn không hoạt động ngay cả trong FF hoặc Chrome. Tập lệnh luôn chuyển hướng đến thư mục gốc. (Có thể tôi đã bỏ lỡ điều gì đó, vì nó sẽ chuyển hướng đến đường dẫn.)

Vì những lý do này, tôi đã sử dụng trang ASP cho chuyển hướng. Nhược điểm là tất nhiên điều này đòi hỏi ASP cổ điển được kích hoạt trên máy chủ.

OpsanBlog có ASP script and instructions hoạt động tốt với IIS6.

Tôi đã gặp một số sự cố khi sử dụng phương pháp này với IIS7. Vấn đề giao diện người dùng chủ yếu, kể từ IIS7 làm cho nó thực sự dễ dàng để bỏ lỡ một cái gì đó.

  • Trước tiên, bạn cần cài đặt ASP làm tính năng vai trò máy chủ web .
  • Thứ hai, sử dụng thư mục ảo không được hoạt động như mong đợi trong IIS7 và tôi không cố gắng gỡ lỗi này. Thay vào đó, tôi đặt tệp trong thư mục gốc của trang web và sử dụng url '/SSLRedirect.asp' trong trang lỗi 403.4 để tham chiếu nó.
  • Cuối cùng, phần khó khăn nhất, bạn KHÔNG được thực thi SSL cho SSLRedirect.asp. Nếu không, bạn sẽ nhận được một lỗi 403.4. Để thực hiện điều này, bạn chọn tệp trong IIS7 'Content View' và chuyển sang 'Features View' để bạn có thể chỉnh sửa cài đặt SSL cho một tệp và vô hiệu hóa hộp kiểm 'Require SSL'.

Trình quản lý IIS sẽ hiển thị tên tệp trong tiêu đề.

+1

Các hướng dẫn được liên kết tại JPPinto.com đã được cập nhật để làm nổi bật rằng điều này không hoạt động trên IIS 7.5 hoặc R2. Họ nói rằng bạn sẽ nhận được một sự vi phạm khóa do những thay đổi trong bảo mật trong các phiên bản mới hơn của IIS. Họ đề nghị sử dụng phương pháp URL Rewrite 2.0 (phương pháp tương tự như câu trả lời từ @toxaq). – AussieRob

9

Các giải pháp dễ dàng nhất và sạch sẽ tôi thấy được để

  1. Trong SSL Settings -> yêu cầu SSL

  2. Trong trang Lỗi -> Bật 403.4 lỗi -> Chuyển tới HTTPS trang web

  3. Trong trang lỗi -> Chỉnh sửa cài đặt tính năng ...-> Đặt các lỗi chi tiết cho các yêu cầu cục bộ và các trang lỗi tùy chỉnh cho yêu cầu từ xa

Lợi ích là nó không yêu cầu thêm dòng mã. Nhược điểm là nó chuyển hướng bạn đến một url tuyệt đối.

+0

hoạt động hoàn hảo (trên IIS 8.5/2012 R2). và không có tinkering với web.config – schmendrick

+0

đây là một cách thông minh để giải quyết vấn đề. thx –

+0

Bạn có thể đưa ra ví dụ về nhược điểm này không? Trong trường hợp nào nó sẽ xảy ra và tại sao nó là một điều tiêu cực? Nếu bạn có thể thêm nó vào câu trả lời của bạn, đó sẽ là tuyệt vời. Cảm ơn rất nhiều! –

0

Global.asax

protected void Application_BeginRequest() 
{ 
if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection) 
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:")); 
} 
+0

Tôi có thể dễ dàng xem xung quanh chuyển hướng này bằng cách đặt "localhost" vào một nơi nào đó trong URI, ví dụ: chuỗi truy vấn http://yourdomain.com?localhost=true Tôi khuyên bạn nên kiểm tra thuộc tính Request.Url.Host thay thế –