URL Yeniden yazma kurallarının IIS7'deki alt dizinler tarafından devralınmasını önleme


11

Bir CMS temiz URL'ler için bir URL yeniden yazma kurulumu var ve benim web.config şöyle:

<?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>

Temelde döner index.php?id=somethingiçine somethingtemiz URL'ler için. Çok basit ve iyi çalışıyor.

CMS'lerde yaygın olarak görüldüğü gibi, arka ucun kesilmesini önlemek için her alt dizinin biri <remove name="Clean URLs" />veya <clear />web.config dosyasında olması gerekir, böylece kural devralınmaz.

Ana kuralda, kuralın kapsamını bir şekilde yalnızca geçerli diziyle sınırlayarak, çocukları tarafından miras alınmaması gerektiğini belirtmenin bir yolu var mı? Böyle bir şey <rule name="Clean URLs" stopProcessing="true" inherit="no">destansı olurdu.

Yanıtlar:



6

Kısa bir süre önce benzer bir durumda bu problemle karşılaştım. Ancak rjenkins'in cevabı, ebeveyn ayarlarının mirasına dayanan sanal uygulamalarda sorunlara neden gibi görünmektedir.

Yeniden yazma kuralının adını biliyorsanız, bunu yapabilirsiniz:

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

2
Bu benim ilk denemimdi, ama bunu her alt dizin için web.config dosyasına koymalısınız ve bu her zaman pratik değildir. Daha temiz olduğunu kabul ediyorum, ancak daha fazla iş, özellikle alt dizinlerde yeniden yazma olduğunda (örneğin bir alt klasörde cms'nin başka bir örneği)
Rich Jenks
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.