มีวิธีใดบ้างในการกำหนดค่า IIS 7.5 ให้เขียน URL ใหม่ไปยังกลุ่มแอปพลิเคชันที่แตกต่างกันในไซต์เดียวกันโดยไม่เกิดข้อผิดพลาด 403.18

เรากำลังใช้ Helicon ISAPI Rewrite 3 บน IIS 6 และทำงานได้อย่างมีเสน่ห์ "แอปพลิเคชัน" ระดับรากกำลังทำงานภายใต้กลุ่มแอปพลิเคชันของตัวเอง และใน IIS 6 เราไม่มีปัญหาในการเขียน URL ใหม่จากกลุ่มแอปพลิเคชันนั้นไปยังกลุ่มแอปพลิเคชันใดกลุ่มหนึ่งจากสี่กลุ่มแอปพลิเคชันอื่น แต่เมื่อฉันคัดลอกข้อมูลการกำหนดค่าเซิร์ฟเวอร์เดียวกันไปยัง IIS 7.5 URL จะเขียนใหม่ไปยังกลุ่มแอปพลิเคชันอื่นใดล้มเหลวด้วยข้อผิดพลาด "403.18 -- ต้องห้าม"

บิตแปลก ๆ คือ IIS 6 ไม่ใช่ (อย่างน้อยเท่าที่ฉันสามารถบอกได้โดยการดูที่กล่องโต้ตอบการกำหนดค่าบริการไซต์) ที่ทำงานภายใต้โหมดการจำลอง IIS 5 ดังนั้นการเขียนใหม่จึงไม่เกิดข้อผิดพลาด 403.18 ดังนั้นบางอย่างต้องแตกต่างออกไป... แต่ไม่ว่ามันจะเป็นอะไร ฉันแน่ใจว่าไม่สามารถเข้าใจได้

แต่เราไม่ได้แต่งงานกับ Helicon ISAPI Rewrite หากมีวิธีอื่นในการรักษากฎการกำหนดค่าการเขียนใหม่ในปัจจุบันโดยใช้โมดูลหรือวิธีอื่น ฉันยินดีที่จะใช้

answer

ใน IIS คุณไม่สามารถกำหนดเส้นทางคำขอจากแอปพลิเคชันหนึ่งไปยังอีกแอปพลิเคชันหนึ่งได้ แอปพลิเคชันถูกแยกออก นั่นคือเหตุผลที่คุณได้รับข้อผิดพลาด 403

คุณสามารถขอพร็อกซีได้โดยใช้ ISAPI_Rewrite, Ape หรือ ARR - ไม่สำคัญเพราะคำขอจะถูกส่งไปยังแอปพลิเคชันอื่นโดยใช้คำขอ HTTP ในเครื่องอยู่แล้ว โซลูชันนี้ค่อนข้างเสถียร แต่คุณจะสูญเสียประสิทธิภาพการทำงานไปบ้าง

การเปลี่ยนเส้นทางอาจไม่ใช่ตัวเลือกที่นี่ เนื่องจากจะสร้างคำขอสองรายการไปยังเซิร์ฟเวอร์อยู่ดี แต่เนื่องจากคำขอจะถูกสร้างขึ้นโดยผู้ใช้ที่มีประสิทธิภาพการเชื่อมต่อที่ช้าอาจลดลงอย่างมาก

ไม่รองรับใน IIS7 สำหรับองค์ประกอบการเขียน URL ใหม่ของ Microsoft ปัญหาเดียวกันเกิดขึ้น

ฉันจำไม่ได้ว่ามันเป็นไปได้ใน IIS6 เพื่อเขียนใหม่ในกลุ่มแอป คุณกำลังเขียนใหม่ไม่ใช่เปลี่ยนเส้นทางใช่หรือไม่ การเปลี่ยนเส้นทางจะทำงานใน IIS7

ฉันจะถาม Helicon ที่ www.isapirewrite.com พวกเขาตอบสนองได้ดีในฟอรัม โมดูล ISAPI อาจใช้งานได้อย่างสมบูรณ์ภายในกระบวนการ w3wp.exe ในขณะนี้ ดังนั้นจึงไม่สามารถส่งคำขอไปยังกลุ่มแอปอื่นได้

สถานที่อื่น ๆ ที่จะถามคำถามจะเป็นที่http://forums.iis.net/ ทีมพัฒนา IIS ตอบกลับโพสต์บางส่วนและอาจให้รายละเอียดว่าทำไมฟังก์ชันของ ISAPI Rewrite จึงเปลี่ยนไปเมื่อย้ายไปยัง IIS7

แน่นอนว่าสิ่งนี้เป็นไปไม่ได้ด้วยการเขียน URL ใหม่ อย่างไรก็ตาม หากคุณต้องการทำจริงๆ คุณสามารถใช้ ARR (Application Request Routing) ร่วมกันและมันจะใช้งานได้ แต่โปรดทราบว่ามันจะเป็นคำขอใหม่ที่สมบูรณ์จริงๆ กล่าวอีกนัยหนึ่งมันจะทำงานเป็นพร็อกซีที่ออกคำขอ HTTP ใหม่ให้กับตัวเองเพื่อที่คุณจะต้องเขียนใหม่เพื่อใช้ URL แบบเต็มรวมถึงชื่อโฮสต์และทั้งหมด นี่เป็นค่าใช้จ่ายที่มาก ดังนั้นเฉพาะในกรณีที่มีความสำคัญต่อแอปพลิเคชันเท่านั้น

แน่นอนตามที่ Scott Forsyth กล่าวถึงแล้ว อีกตัวเลือกหนึ่งคือใช้การเปลี่ยนเส้นทาง

เรายังเคยใช้ ISAPI Rewrite 3 บน IIS6 แต่เมื่อเราเปลี่ยนไปใช้ IIS7.5 เราเปลี่ยนไปใช้ Helicon APE และทำงานได้ดีกว่า Rewrite คุณสามารถใช้ข้อมูลในฐานข้อมูลของคุณเพื่อเขียน URL ใหม่

นี่คือสิ่งที่ตู้เสื้อผ้าที่ฉันพบซึ่งใกล้เคียงกับ mod_rewrite สำหรับ IIS

http://www.iis.net/download/URLRewrite