IIS Rewrite เขียนแมปและสตริงการสืบค้นซ้ำ


10

โปรดช่วยฉันเข้าใจการเขียนแผนที่ใหม่ฉันมีการตั้งค่านี้:

<rewriteMap name="MyMap">
   <add key="/pages" value="/website/pages/index.aspx" />
   <add key="/pages/page-1" value="/website/pages/page-1/index.aspx" />
   <add key="/pages/page-1/section-1" value="/website/pages/page-1/section-1.aspx" />
</rewriteMap>

นี่คือกฎของฉัน:

<rule name="Rewrite rule for MyMap" stopProcessing="true">
   <match url=".*" />
   <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      <add input="{MyMap:{REQUEST_URI}}" pattern="(.+)" />
   </conditions>
   <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>

สิ่งนี้ใช้งานได้หากฉันพยายามเข้าถึงหน้าเหล่านี้:

  • www.mydomain.com/pages (ตกลง)
  • www.mydomain.com/pages/page-1 (ตกลง)
  • www.mydomain.com/pages/page-1/section-1 (ตกลง)

แต่ฉันต้องการความเป็นไปได้ที่จะเพิ่มสตริงแบบสอบถามในหน้าใด ๆ เหล่านี้ตัวอย่าง:

  • www.mydomain.com/pages?page=1 (FAIL)

เมื่อฉันพยายามเข้าถึงหน้านี้ฉันจะได้รับ 404 ฉันจะทำให้มันทำงานได้อย่างไร

คำตอบ:


12

โดยกฎการเขียน URL เริ่มต้นใหม่โดยใช้การเขียนแผนที่ใหม่จะสร้างการจับคู่ในตัวแปร{REQUEST_URI} ซึ่งรวมถึง URL + สตริงการสืบค้น สิ่งนี้ช่วยให้คุณจับคู่กับ URL ด้วยพารามิเตอร์สตริงข้อความค้นหาและเขียนลงในหน้าอื่น ๆ มีประโยชน์มาก แต่นี่ไม่ใช่สิ่งที่คุณต้องการ / ต้องการ

คุณต้องการจับคู่กับ URL เท่านั้นโดยไม่มีสตริงการสืบค้น เพื่อที่จะเปลี่ยนนี้คุณต้องเปลี่ยน{} REQUEST_URIอยู่ในสภาพที่จะ{URL} จากนั้นจะมีการจับคู่เฉพาะ URL (ไม่มีสตริงข้อความค้นหา) กับแผนที่เขียนใหม่ จากนั้นคุณสามารถเพิ่มสตริงแบบสอบถามลงใน URL ที่เขียนใหม่เพื่อให้สคริปต์ที่ดำเนินการยังคงสามารถเข้าถึงได้

คุณท้ายด้วยกฎเช่น:

<rule name="Rewrite rule for MyMap">
    <match url=".*" />
    <conditions>
        <add input="{MyMap:{URL}}" pattern="(.+)" />
    </conditions>
    <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>

1
คำอธิบายที่ดี ฉันสงสัยว่าจะเพิกเฉยต่อ QueryString เพื่อวัตถุประสงค์ในการจับคู่เช่นกัน
dthrasher

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