วิธีที่ดีที่สุดในการเปลี่ยนเส้นทาง HTTP ทั้งหมดไปยัง HTTPS ใน IIS


26

เราต้องการให้ทุกไซต์บนเว็บเซิร์ฟเวอร์ของเรา (IIS 10) บังคับใช้ SSL (เช่นเปลี่ยนเส้นทาง HTTP เป็น HTTPS)

ขณะนี้เรากำลัง 'ขอ SSL' ในแต่ละไซต์และตั้งค่า403 errorตัวจัดการเพื่อดำเนินการ302 redirectกับที่อยู่ https สำหรับเว็บไซต์นั้น ๆ

มันใช้งานได้ดี แต่มันเป็นความเจ็บปวดที่ต้องทำสำหรับทุก ๆ เว็บไซต์มีที่ว่างมากมายสำหรับความผิดพลาดของมนุษย์

นึกคิดฉันต้องการที่จะตั้งขึ้นอย่างถาวร301 redirectในทุกHTTP://*การHTTPS://*

มีวิธีง่าย ๆ ใน IIS หรือไม่


คุณไม่สามารถเขียนสคริปต์เพื่อทำการเปลี่ยนแปลงนี้สำหรับทุกไซต์ที่ทั้งสองจะลดภาระการดูแลและยังช่วยป้องกันการพิมพ์ผิดและผิดพลาด?
ทอดด์วิลคอกซ์

1
ชื่อไม่ถูกต้อง ผมคิดว่ามันก็ตั้งใจว่าจะอ่าน "วิธีที่ดีที่สุดที่จะเปลี่ยนเส้นทาง HTTP ทั้งหมดเพื่อ HTTPS ใน IIS"
มิก

@ToddWilcox คุณสามารถให้ตัวอย่างของสคริปต์ดังกล่าวได้หรือไม่
userSteve

อย่าใช้ IIS

คำตอบ:


40

IIS URL Rewrite Module 2.1 สำหรับ IIS7 + อาจเป็นเพื่อนของคุณ โมดูลที่สามารถดาวน์โหลดได้จากURL Rewrite การใช้โมดูล URL RewriteและURL Rewrite Module 2.0 การอ้างอิงการกำหนดค่าอธิบายวิธีใช้โมดูล

เมื่อติดตั้งโมดูลแล้วคุณสามารถสร้างการเปลี่ยนเส้นทางโฮสต์โดยใช้ IIS Manager เลือกURL Rewrite , เพิ่มกฎ (s) ...และกฎที่ว่างเปล่า

ชื่อ:
เปลี่ยนเส้นทางเป็น HTTPS

จับคู่ URL ที่
ขอ URL: Matches the Pattern
การใช้: Wildcards
รูปแบบ: *
ไม่สนใจตัวพิมพ์:ตรวจสอบแล้ว

เงื่อนไข
การจัดกลุ่มแบบลอจิคัล: Match Any
อินพุตเงื่อนไข : {HTTPS}
ตรวจสอบว่าสตริงอินพุต: Matches the Pattern
รูปแบบ: OFF
ไม่สนใจตัวพิมพ์:ตรวจสอบ
กลุ่มแทร็กที่ดักจับข้ามเงื่อนไข:ไม่ได้ตรวจสอบ

ตัวแปรเซิร์ฟเวอร์
เว้นว่างไว้

การกระทำ
ประเภทการดำเนินการ: Redirect
การเปลี่ยนเส้นทาง URL: https://{HTTP_HOST}{REQUEST_URI}
สตริงแบบสอบถามผนวก:ไม่ได้ตรวจสอบ
ประเภทการเปลี่ยนเส้นทาง: Permanent (301)

ใช้กฎและเรียกใช้ IISReset (หรือคลิกรีสตาร์ทในตัวจัดการ IIS)

อีกทางเลือกหนึ่งหลังจากติดตั้งโมดูลแล้วคุณสามารถแก้ไขไฟล์ applicationHost.config ได้ดังนี้:

<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>

จะสามารถใช้การเปลี่ยนเส้นทาง 301 แบบถาวรได้หรือไม่
userSteve

@userSteve ตามคำตอบข้างต้นคุณสามารถเลือกประเภทการเปลี่ยนเส้นทาง
BE77Y

@userSteve อ๊ะคุณควรจะสามารถเปลี่ยนRedirect Typeเป็น 301 และรับผลลัพธ์เดียวกัน
sippybear

1
@sippybear อีกหนึ่งคำถาม - อินพุต = "{HTTPS}" หมายถึงอะไร นี่ควรเป็น {HTTP} ตามที่จะเป็นอินพุตและ HTTP เอาต์พุตหรือไม่
userSteve

3
{HTTPS} เป็นตัวแปรที่คุณค้นหาเพื่อค้นหาว่าการเชื่อมต่อนั้นปลอดภัยหรือไม่ คุณสามารถอ่านเพิ่มเติมได้ที่นี่: docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/ ......ในกรณีนี้เรากำลังตรวจสอบว่า {HTTPS} ปิดใช้งานอยู่หรือไม่แล้วเปลี่ยนเส้นทางหาก มันคือ
sippybear

1

การวิจัยของฉันแสดงให้เห็นว่านี่อาจเป็นวิธีที่ดีกว่าในการเปลี่ยนเส้นทาง:

<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
คุณช่วยอธิบายได้ไหมว่าทำไมสิ่งนี้ถึงดีกว่า
userSteve

ฉันขอโทษฉันไม่สามารถอธิบายได้ด้วยตนเองของฉันเพียงแค่อ่านในไม่กี่แห่งที่มีไวยากรณ์ดีกว่า
Fallen Angel

1
คุณมีแหล่งที่มาหรือไม่?
dangel

1
นี่เป็นกฎเดียวกับในserverfault.com/a/893804/7184แต่เขียนโดยใช้นิพจน์ทั่วไปและจับคู่จัดกลุ่มทั้งหมด ข้อดีอีกข้อหนึ่งอาจเป็นไปได้ว่านิพจน์กฎใช้ค่าเริ่มต้นของกฎและเป็นตัวเปลี่ยน
bzlm

ฉันใช้ IIS 10 และคำตอบที่เลือกไม่ได้ผลสำหรับฉัน ด้วยเหตุผลบางอย่าง IIS ไม่รู้จักไวยากรณ์เป็นกฎที่ถูกต้อง ฉันวางรหัสของคุณไว้และทำงานได้ทันทีขอบคุณที่แบ่งปัน
Jordan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.