ป้องกันไม่ให้กฎการเขียนซ้ำ URL จากไดเรกทอรีย่อยใน IIS7


11

ฉันมีการตั้งค่า URL Rewrite สำหรับ URL ที่สะอาดใน CMS และ web.config ของฉันมีลักษณะดังนี้:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Clean URLs" stopProcessing="true">
                    <match url="^([^/]+)/?$" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="?id={R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

โดยทั่วไปจะเปลี่ยนindex.php?id=somethingเป็นsomethingURL ที่สะอาด ง่ายมากและใช้งานได้ดี

ตามปกติใน CMSs เพื่อป้องกันไม่ให้แบ็คเอนด์แตกหักแต่ละไดเรกทอรีย่อยต้องการอย่างใดอย่างหนึ่ง<remove name="Clean URLs" />หรือ<clear />ใน web.config เพื่อให้กฎไม่ได้รับการสืบทอด

มีวิธีการระบุในกฎหลักที่ไม่ควรสืบทอดโดยลูกของมันเลยโดย จำกัด ขอบเขตของกฎไปยังไดเรกทอรีปัจจุบันเท่านั้นหรือไม่ สิ่งที่ต้องการ<rule name="Clean URLs" stopProcessing="true" inherit="no">จะเป็นมหากาพย์

คำตอบ:



6

ฉันเพิ่งพบปัญหานี้ในสถานการณ์ที่คล้ายกัน แต่คำตอบจาก rjenkins ดูเหมือนจะทำให้เกิดปัญหากับแอพพลิเคชันเสมือนที่อาศัยการสืบทอดการตั้งค่าพาเรนต์

หากคุณรู้ชื่อของกฎการเขียนใหม่คุณสามารถทำสิ่งนี้ได้:

<rewrite>
  <rules>
    <remove name="RewriteNameToDisable" />
  </rules>
</rewrite>

2
นั่นเป็นความพยายามครั้งแรกของฉัน แต่คุณต้องใส่ไว้ใน web.config สำหรับทุกไดเรกทอรีย่อยและไม่ได้ใช้งานได้จริง ฉันเห็นด้วยมันสะอาดกว่า แต่มันทำงานได้มากกว่าโดยเฉพาะอย่างยิ่งเมื่ออาจมีการเขียนในไดเรกทอรีย่อย (เช่นอีกหนึ่งตัวอย่างของ cms ในโฟลเดอร์ย่อย)
Rich Jenks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.