Cách tốt nhất để chuyển hướng tất cả HTTP sang HTTPS trong IIS


26

Chúng tôi muốn TẤT CẢ các trang web trên máy chủ web của mình (IIS 10) để thực thi SSL (tức là chuyển hướng HTTP sang HTTPS).

Chúng tôi hiện đang 'Yêu cầu SSL' trên mỗi trang web và thiết lập 403 errortrình xử lý để thực hiện 302 redirectđịa chỉ https cho trang web cụ thể đó.

Điều này làm việc tuyệt vời. Nhưng đó là một nỗi đau để làm cho mỗi trang web, có rất nhiều chỗ cho lỗi của con người.

Lý tưởng nhất là tôi muốn thiết lập vĩnh viễn 301 redirecttất cả HTTP://*đểHTTPS://*

Có một cách đơn giản để làm điều này trong IIS?


Bạn có thể viết một kịch bản để thực hiện thay đổi này cho mọi trang web vừa giúp giảm gánh nặng hành chính vừa giúp ngăn ngừa lỗi chính tả và lỗi không?
Todd Wilcox

1
Tiêu đề không chính xác. Tôi nghĩ rằng nó đã có ý định đọc "Cách tốt nhất để chuyển hướng tất cả HTTP sang HTTPS trong IIS"
Mick

@ToddWilcox bạn có thể cho một ví dụ về một kịch bản như vậy không?
userSteve

Không sử dụng IIS ,: D

Câu trả lời:


40

Mô-đun viết lại URL IIS 2.1 cho IIS7 + có thể là bạn của bạn. Mô-đun có thể được tải xuống từ IIS URL Rewrite . Sử dụng Mô-đun Viết lại URLTham chiếu cấu hình mô-đun viết lại URL 2.0 giải thích cách sử dụng mô-đun.

Sau khi mô-đun được cài đặt, bạn có thể tạo chuyển hướng rộng máy chủ bằng IIS Manager. Chọn Viết lại URL , Thêm quy tắc ...quy tắc trống .

Tên:
Chuyển hướng đến HTTPS

URL phù hợp URL được
yêu cầu: Matches the Pattern
Sử dụng: Wildcards
Mẫu: *
Bỏ qua trường hợp: Đã kiểm tra

Điều kiện Phân
nhóm logic: Match Any
Đầu vào điều kiện : {HTTPS}
Kiểm tra nếu chuỗi đầu vào: Matches the Pattern
Mẫu: OFF
Bỏ qua trường hợp: Đã kiểm tra Các
nhóm chụp theo dõi qua các điều kiện: Không được chọn

Biến máy chủ
Để trống.

Hành
động Loại hành động: Redirect
Chuyển hướng URL: https://{HTTP_HOST}{REQUEST_URI}
Nối chuỗi truy vấn: Không được kiểm tra
Loại chuyển hướng: Permanent (301)

Áp dụng quy tắc và chạy IISReset (hoặc nhấp vào Khởi động lại trong Trình quản lý IIS)

Ngoài ra, sau khi cài đặt mô-đun, bạn có thể sửa đổi tệp applicationhost.config như sau:

<system.webServer>
  <rewrite>
    <globalRules>
      <rule name="Redirect to HTTPS" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" ignoreCase="true" negate="false" />
        <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
          <add input="{HTTPS}" ignoreCase="true" matchType="Pattern" negate="false" pattern="OFF" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
      </rule>
    </globalRules>
  </rewrite>
</system.webServer>

Điều này sẽ làm việc cho chuyển hướng 301 vĩnh viễn?
userSteve

@userSteve theo câu trả lời ở trên, bạn có thể chọn loại chuyển hướng.
BE77Y

@userSteve Rất tiếc, vâng, bạn sẽ có thể thay đổi Loại chuyển hướng thành 301 và nhận được kết quả tương tự
sippybear

1
@sippybear thêm một câu hỏi - input = "{HTTPS}" nghĩa là gì? Đây có nên là {HTTP} vì đó sẽ là đầu vào và HTTP là đầu ra?
userSteve

3
{HTTPS} là một biến mà bạn truy vấn để tìm hiểu xem kết nối có được bảo mật hay không. Bạn có thể đọc thêm về nó ở đây: docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/ trộm Trong trường hợp này, chúng tôi đang kiểm tra xem {HTTPS} có "tắt" không, và sau đó chuyển hướng nếu đó là
sippybear

1

Nghiên cứu của tôi cho thấy rằng đây có thể là một cách tốt hơn để chuyển hướng:

<rewrite>
    <rules>
        <rule name="http to https" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTPS}" pattern="^OFF$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
    </rules>
</rewrite>

1
Bạn có thể giải thích tại sao điều này là tốt hơn?
userSteve

Tôi xin lỗi tôi không thể tự giải thích nó, chỉ cần đọc ở một vài nơi đó là cú pháp là tốt hơn.
Thiên thần sa ngã

1
bạn có nguồn nào không
dangel

1
Đây chính xác là quy tắc giống như trong serverfault.com/a/893804/7184 , nhưng được viết bằng cách sử dụng các biểu thức chính quy và nhóm Tất cả khớp. Một nhược điểm có thể là biểu thức quy tắc sử dụng mặc định quy tắc và có độ sâu hơn.
bzlm

Tôi đang dùng IIS 10 và câu trả lời được chọn không phù hợp với tôi. Vì một số lý do, IIS đã không nhận ra cú pháp là một quy tắc hợp lệ. Tôi đã dán mã của bạn vào và nó hoạt động ngay lập tức, cảm ơn vì đã chia sẻ.
Jordan
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.