IIS7: HTTP-> HTTPS อย่างหมดจด


146

มีวิธีใหม่ในการเปลี่ยนเส้นทางความพยายามทั้งหมดเพื่อไปยัง HTTP: // เวอร์ชันของไซต์ไปยัง HTTPS: // ที่เทียบเท่าหรือไม่


สามารถหาคำตอบได้ในบล็อกของ James Kovac: jameskovacs.com/2007/05/09/…
cpuguru

ถ้าคุณอยู่ใน IIS 7 และ R2 ที่นี่เป็นคู่มือที่ทำงานและในที่สุด "สะอาด"
Ujwal ปาร์กเกอร์

คำตอบ:


177

ผมคิดว่าวิธีที่สะอาดเป็นตามที่อธิบายไว้ที่นี่ใน IIS-aid.com เป็น web.config เท่านั้นดังนั้นหากคุณเปลี่ยนเซิร์ฟเวอร์คุณไม่จำเป็นต้องจำขั้นตอนทั้งหมดที่คุณทำผ่านหน้าข้อผิดพลาดที่กำหนดเอง 403.4 หรือการอนุญาตพิเศษอื่น ๆ มันใช้งานได้

<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
สิ่งนี้ใช้ได้สำหรับฉันด้วยข้อยกเว้นที่ฉันต้องแก้ไข URL การเปลี่ยนเส้นทางเป็น https: // {HTTP_HOST} {REQUEST_URI}
Andrew S

6
มันก็ใช้ได้กับฉันเช่นกัน ฉันต้องเพิ่มแอปพลิเคชันที่ฉันใช้งานอยู่ ... localhost / app1 => http: // {HTTP_HOST} / app1 / {R: 1}
RealSollyM

15
สำหรับผู้ที่ไม่มีส่วนการเขียนใหม่ให้วางกฎในส่วนต่อไปนี้ของ web.config: <system.webServer><rewrite> <rules> ... </rules> </rewrite> </ system .webServer>
raider33

16
ตรวจสอบให้แน่ใจว่าได้ติดตั้ง Microsoft URL Rewrite Module ไว้บนเซิร์ฟเวอร์ IIS แล้ว
Iman

7
สำหรับเหตุผล SEO คุณควรใช้ redirectType = "ถาวร" ตรวจสอบsupport.google.com/webmasters/answer/…
Niels Bosma

14

ทางออกที่ง่ายและสะอาดที่สุดที่ฉันพบคือ

  1. ในการตั้งค่า SSL -> ต้องการ SSL

  2. ในหน้าข้อผิดพลาด -> ข้อผิดพลาด 403.4 -> เปลี่ยนเส้นทางไปยังไซต์ HTTPS

  3. ในหน้าข้อผิดพลาด -> แก้ไขการตั้งค่าคุณสมบัติ ... -> ตั้งข้อผิดพลาดโดยละเอียดสำหรับคำขอในท้องถิ่นและหน้าข้อผิดพลาดที่กำหนดเองสำหรับคำขอระยะไกล

ประโยชน์คือมันไม่จำเป็นต้องมีบรรทัดของรหัสเพิ่มเติม ข้อเสียคือมันเปลี่ยนเส้นทางคุณไปสู่ ​​URL ที่แน่นอน


1
ทำงานได้อย่างสมบูรณ์ (บน IIS 8.5 / 2012 R2) และไม่มีการซ่อมด้วย web.config
schmendrick

คุณช่วยยกตัวอย่างข้อเสียนี้ได้ไหม มันจะเกิดขึ้นในสถานการณ์ใดและทำไมมันจึงเป็นสิ่งที่ไม่ดี? หากคุณสามารถเพิ่มลงในคำตอบของคุณได้ ขอบคุณมาก!
Marcos Dimitrio

2
@MarcosDimitrio Im ไม่แน่ใจเพราะมันนานมาแล้ว แต่ฉันเชื่อว่าเมื่อฉันหมายถึงมันจะนำคุณไปสู่ ​​URL ที่แน่นอนฉันหมายถึง "ฐาน URL" ตัวอย่างเช่น "http": //mywebsite.com/hellokitty จะถูกเปลี่ยนเส้นทางไปที่ "https": //mywebsite.com ซึ่งสูญเสียข้อมูลเส้นทางบางส่วนซึ่งจะทำลายทุกลิงก์ที่มีอยู่ด้วยข้อมูลเส้นทางเพิ่มเติม
ColacX

5

วิธีที่สะอาดจะเปลี่ยนเฉพาะรูปแบบ URL จาก http -> https และทำให้ทุกอย่างเท่าเทียมกัน ควรเป็นฝั่งเซิร์ฟเวอร์เพื่อไม่ให้เกิดปัญหากับเบราว์เซอร์

JPPinto.com มีคำแนะนำทีละขั้นตอนเกี่ยวกับวิธีการทำสิ่งนี้ยกเว้นว่าใช้ javascript (HttpRedirect.htm) แทนการเปลี่ยนเส้นทางฝั่งเซิร์ฟเวอร์ ด้วยเหตุผลบางอย่างฉันไม่สามารถให้ IE รันจาวาสคริปต์ได้หากคุณเปิดใช้งาน 'แสดงข้อความแสดงข้อผิดพลาด HTTP ที่เป็นมิตร' ซึ่งจะเปิดใช้งานตามค่าเริ่มต้น อีกสิ่งหนึ่งที่มีสคริปต์ก็คือการเปลี่ยนเส้นทางไปยังเส้นทางไม่ทำงานแม้ใน FF หรือ Chrome สคริปต์จะเปลี่ยนเส้นทางไปที่รูทเสมอ (บางทีฉันอาจพลาดบางสิ่งบางอย่างเพราะควรเปลี่ยนเส้นทางไปยังเส้นทาง)

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

OpsanBlog มีสคริปต์ ASP และคำแนะนำที่ทำงานได้ดีกับ IIS6

ฉันมีปัญหาเล็กน้อยโดยใช้วิธีนี้กับ IIS7 ปัญหาส่วนติดต่อผู้ใช้ส่วนใหญ่เนื่องจาก IIS7 ทำให้ง่ายต่อการพลาด

  • ก่อนอื่นคุณต้องติดตั้ง ASP เป็นคุณสมบัติบทบาทของเว็บเซิร์ฟเวอร์
  • ข้อที่สองการใช้ไดเรกทอรีเสมือนไม่ทำงานตามที่คาดไว้ใน IIS7 และฉันไม่ได้พยายามแก้ไขปัญหานี้ ฉันวางไฟล์ไว้ในโฟลเดอร์ root ของเว็บไซต์และใช้ url '/SSLRedirect.asp' ในหน้าข้อผิดพลาด 403.4 เพื่ออ้างอิง
  • ที่ผ่านมาส่วนที่ยุ่งยากที่สุดที่คุณจะต้องไม่บังคับใช้ SSL สำหรับ SSLRedirect.asp มิฉะนั้นคุณจะได้รับข้อผิดพลาด 403.4 ในการทำเช่นนี้คุณจะต้องเลือกไฟล์ใน IIS7 'Content View' และเปลี่ยนเป็น 'Features View' เพื่อให้คุณสามารถแก้ไขการตั้งค่า SSL สำหรับไฟล์เดียวและปิดการใช้งานช่องทำเครื่องหมาย 'Require SSL'

ตัวจัดการ IIS ควรแสดงชื่อไฟล์ในส่วนหัว


1
คำแนะนำที่เชื่อมโยงที่ JPPinto.com ได้รับการอัปเดตเพื่อเน้นว่าสิ่งนี้ไม่ทำงานบน IIS 7.5 หรือ R2 พวกเขากล่าวว่าคุณจะได้รับการละเมิดการล็อคเนื่องจากการเปลี่ยนแปลงความปลอดภัยใน IIS รุ่นใหม่กว่า พวกเขาแนะนำให้ใช้วิธี URL Rewrite 2.0 แทน (คล้ายกันตามคำตอบจาก @toxaq)
Robert Shattock

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:"));
}

1
ฉันสามารถหลีกเลี่ยงการเปลี่ยนเส้นทางนี้ได้ง่ายๆโดยใส่ "localhost" ลงใน URI เช่นสตริงการสืบค้นyourdomain.com?localhost=true ฉันขอแนะนำให้ตรวจสอบคุณสมบัติ Request.Url.Host แทน
Aidy J

0

ฉันใช้ classic asp (อินทราเน็ต) และบนหน้าเว็บที่ต้องเข้าสู่ระบบไฟล์เข้าสู่ระบบรวมถึงการเปลี่ยนเส้นทาง:

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

หลักสูตรนี้ไม่รวมข้อมูล GET หรือ POST ดังนั้นด้วยเหตุนี้จึงเป็นการเปลี่ยนเส้นทางไปยังหน้าที่ปลอดภัยของคุณ


-4

ฉันคิดว่า 'สะอาดหมดจด' คุณหมายถึงชอบด้วยการเปลี่ยนเส้นทาง 300 Config สำหรับจำนวนมากของเซิร์ฟเวอร์และภาษาที่นี่

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