Score:0

การใช้กฎการเขียนซ้ำ IIS จากหลาย web.configs สำหรับคำขอเดียว

ธง it

ฉันกำลังพยายามกำหนดค่าโครงสร้างไดเร็กทอรีในเว็บไซต์ IIS โดยใช้กฎการเขียนซ้ำในระดับต่างๆ ตัวอย่างเช่น พิจารณาโครงสร้างต่อไปนี้:

เว็บไซต์เริ่มต้น
ââ web.config
ââ v1
   ââ web.config
   ââ wwwรูท
      ââ สวัสดี.txt

ฉันต้องการที่จะสามารถเข้าถึงได้ สวัสดี. txt ผ่าน http://localhost/hello.txt ฉันได้กำหนดค่า เว็บ.config ที่ระดับรูทของเว็บไซต์ดังนี้:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Rewrite to v1" stopProcessing="false">
          <match url="^(?!v1).*" />
          <action type="Rewrite" url="v1\{R:0}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

และฉันได้กำหนดค่า เว็บ.config ใน v1 ไดเรกทอรีเช่นนี้:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Rewrite to wwwroot" stopProcessing="false">
          <match url="^(?!wwwroot).*" />
          <action type="Rewrite" url="wwwroot\{R:0}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

การเขียนซ้ำระดับเดียวใช้งานได้เมื่อฉันเข้าถึง http://localhost/v1/hello.txt แต่การเขียนซ้ำสองระดับใช้ไม่ได้กับ http://localhost/hello.txt หน้าข้อผิดพลาด IIS แสดงให้เห็นว่าคำขอยังคงแก้ไขไปยังเส้นทางทางกายภาพ â¦\v1\hello.txt ค่อนข้างมากกว่า â¦\v1\wwwroot\hello.txt; ดู https://i.stack.imgur.com/KjdH5.png. โปรดทราบว่าการเปลี่ยนการเขียนใหม่เป็นการเปลี่ยนเส้นทางทำให้สามารถให้บริการไฟล์ได้สำเร็จ

มีวิธีการทำงานนี้หรือไม่ หรือเป็นข้อจำกัดบางประการของ URL Rewrite Module Microsoft ดูเหมือนจะอ้างว่าสิ่งนี้ได้รับการสนับสนุนใน การอ้างอิงการกำหนดค่าโมดูลเขียนซ้ำ URL:

การสืบทอดกฎ

หากมีการกำหนดกฎในการกำหนดค่าหลายระดับ โมดูลการเขียนซ้ำ URL จะประเมินกฎตามลำดับต่อไปนี้:

  1. ประเมินกฎสากลทั้งหมด
  2. ประเมินชุดกฎที่มีกฎแบบกระจายจากระดับการกำหนดค่าพาเรนต์ รวมทั้งกฎจากระดับการกำหนดค่าปัจจุบัน การประเมินจะดำเนินการตามลำดับจากแม่สู่ลูก ซึ่งหมายความว่ากฎแม่จะได้รับการประเมินก่อน และกฎที่กำหนดไว้ในระดับลูกสุดท้ายจะได้รับการประเมินครั้งสุดท้าย

ฉันรู้ว่าฉันสามารถสร้าง เว็บ.config ที่ระดับรูทของเว็บไซต์ให้อ้างอิงถึงส่วนใน wwwroot ไดเรกทอรีโดยตรง (ผ่าน url="v1\wwwroot\{R:0}"). อย่างไรก็ตาม ฉันไม่ต้องการทำเช่นนี้ ในที่สุดฉันจะขยายออกไปด้านนอก เว็บ.config เพื่อรองรับเวอร์ชันอื่นๆ (v2, v3, â¦) ซึ่งอาจมีหรือไม่มี a wwwroot ไดเร็กทอรีย่อย ดังนั้น การรักษาการเขียนใหม่เฉพาะเวอร์ชันใด ๆ ไปยังไดเร็กทอรีย่อยภายในในไดเร็กทอรีเฉพาะเวอร์ชันจะสะอาดกว่ามาก เว็บ.config.

ฉันได้ลองใช้การติดตามคำขอที่ล้มเหลว กฎภายนอก, เขียนใหม่เป็น v1, ถูกบันทึกเพื่อให้ทำงานได้สำเร็จ ไม่มีการกล่าวถึงกฎภายใน เขียนใหม่เป็น wwwroot.

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา