IIS7: HTTP-> HTTPS Sạch sẽ


146

Có cách nào rõ ràng để 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?


Câu trả lời có thể được tìm thấy trên blog của James Kovac: jameskovacs.com/2007/05/09/ trên
cpuguru

Nếu bạn đang dùng IIS 7 và trên R2 thì đây là một hướng dẫn hoạt động và "sạch" nhất
Ujwal Parker

Câu trả lời:


177

Tôi nghĩ rằng cách sạch nhất là như được mô tả ở đây trên IIS-aid.com . Đó chỉ là web.config 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 đã thực hiện 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="Permanent" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

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

6
Điều này cũng làm việc cho tôi. Tôi đã phải thêm ứng dụng tôi đang chạy trong ... localhost / app1 => http: // {HTTP_HOST} / app1 / {R: 1}
RealSollyM

15
Đối với bất kỳ ai chưa có phần viết lại, hãy đặt các quy tắc trong các phần sau của web.config: <system.webServer> <viết lại> <quy tắc> ... </ quy tắc> </ viết lại> </ system .webServer>
raider33

16
đảm bảo Mô-đun Viết lại URL của Microsoft được cài đặt trên máy chủ IIS
Iman

7
Vì lý do SEO, bạn nên sử dụng redirectType = "Vĩnh viễn". Đánh giá support.google.com.vn/webmastershd/ từ
Niels Bosma

14

Giải pháp dễ dàng và sạch nhất tôi tìm thấy là

  1. Trong Cài đặt SSL -> yêu cầu SSL

  2. Trong trang lỗi -> Lỗi 403.4 -> Chuyển hướng đến trang web HTTPS

  3. Trong trang lỗi -> Chỉnh sửa cài đặt tính năng ... -> Đặt lỗi chi tiết cho yêu cầu cục bộ và 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.


1
hoạt động hoàn hảo (trên IIS 8.5 / 2012 R2). và không mày mò với web.config
schmendrick

Bạn có thể vui lòng cho một ví dụ về nhược điểm này? 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, điều đó sẽ rất tuyệt. Cảm ơn rất nhiều!
Marcos Dimitrio

2
@MarcosDimitrio Tôi không chắc chắn vì nó đã rất lâu rồi. nhưng tôi tin rằng khi tôi có nghĩa là nó chuyển hướng bạn đến một url tuyệt đối thì tôi có nghĩa là "url cơ sở". Ví dụ: "http": //mywebsite.com/hellokitty sẽ được chuyển hướng đến "https": //mywebsite.com do đó làm mất một số thông tin đường dẫn, điều này sẽ phá vỡ mọi liên kết hiện có với thông tin đường dẫn bổ sung.
ColacX

5

Một cách rõ ràng 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 đề về trình duyệt.

JPPinto.com có các hướng dẫn Từng bước về cách thực hiện, ngoại trừ việc họ sử dụng javascript (HttpRedirect.htmlm) thay vì chuyển hướng phía máy chủ. Vì một số lý do, tôi không thể để IE chạy javascript nếu bạn đã bật '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 nữa với kịch bản là việc chuyển hướng đến đường dẫn không hoạt động ngay cả trong FF hoặc Chrome. Kịch bản luôn chuyển hướng đến root. (Có lẽ tôi đã bỏ lỡ điều gì đó, vì nó nên chuyển hướng đến đường dẫn.)

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

OpsanBlog có tập lệnh ASP và hướng dẫn hoạt động tốt với IIS6.

Tôi đã có một vài vấn đề khi sử dụng phương pháp này với IIS7. Vấn đề giao diện người dùng là chủ yếu, vì 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 như một tính năng vai trò của máy chủ web.
  • Thứ hai, sử dụng một thư mục ảo không hoạt động như mong đợi trong IIS7 và tôi đã không thử gỡ lỗi này. Thay vào đó, tôi đặt tệp vào 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.
  • Cuối cùng, phần khó nhất, bạn KHÔNG được thi hành SSL cho SSLRedirect.asp . Nếu không, bạn sẽ gặp lỗi 403.4. Để thực hiện việc này, bạn chọn tệp trong IIS7 'Chế độ xem nội dung' và chuyển sang 'Chế độ xem tính năng' để bạn có thể chỉnh sửa cài đặt SSL cho một tệp và tắt hộp kiểm 'Yêu cầu 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ẽ bị vi phạm khóa do thay đổi về 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 thay thế (cách tiếp cận tương tự theo câu trả lời từ @toxaq).
Robert Shattock

0

Toàn cầu

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

1
Tôi có thể dễ dàng vượt qua chuyển hướng này bằng cách đặt "localhost" ở đâu đó vào URI, ví dụ: chuỗi truy vấn yourdomain.com?localhost=true Tôi sẽ đề nghị kiểm tra thuộc tính Request.Url. Thay vào đó
Aidy J

0

Tôi sử dụng asp cổ điển (mạng nội bộ) và trên các trang yêu cầu đăng nhập, tệp đăng nhập bao gồm chuyển hướng:

if Request.ServerVariables("SERVER_PORT_SECURE") <> "1" or Request.ServerVariables("HTTPS") <> "on" then 
    Response.Redirect "https://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")
end if

Điều này tất nhiên không bao gồm dữ liệu GET hoặc POST. Vì vậy, trong thực tế, nó là một chuyển hướng sạch đến trang bảo mật của bạn.


-4

Tôi nghĩ rằng 'sạch sẽ' bạn có nghĩa là như với một chuyển hướng 300. Cấu hình cho rất nhiều máy chủ và ngôn ngữ ở đây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.