Verhindern Sie, dass URL Rewrite-Regeln von Unterverzeichnissen in IIS7 geerbt werden

11

Ich habe ein URL-Rewrite-Setup für saubere URLs in einem CMS und meine web.config sieht folgendermaßen aus:

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

Grundsätzlich index.php?id=somethingwerden somethingsaubere URLs verwendet. Sehr einfach und es funktioniert gut.

Wie in CMS üblich, benötigt jedes Unterverzeichnis entweder <remove name="Clean URLs" />oder <clear />in seiner web.config, damit das Back-End nicht beschädigt wird, damit die Regel nicht vererbt wird.

Gibt es eine Möglichkeit, in der übergeordneten Regel anzugeben, dass sie überhaupt nicht von ihren untergeordneten Regeln geerbt werden soll, indem der Gültigkeitsbereich der Regel auf das aktuelle Verzeichnis beschränkt wird? So etwas <rule name="Clean URLs" stopProcessing="true" inherit="no">wäre episch.

Rich Jenks
quelle

Antworten:

6

Ich bin kürzlich in einer ähnlichen Situation auf dieses Problem gestoßen. Die Antwort von rjenkins scheint jedoch Probleme mit virtuellen Anwendungen zu verursachen, die auf der Vererbung übergeordneter Einstellungen beruhten.

Wenn Sie den Namen der Umschreiberegel kennen, können Sie dies einfach tun:

<rewrite>
  <rules>
    <remove name="RewriteNameToDisable" />
  </rules>
</rewrite>
Bryan Way
quelle
2
Das war mein erster Versuch, aber das muss man für jedes Unterverzeichnis in die web.config einfügen, und das ist nicht immer praktisch. Ich würde zustimmen, dass es sauberer ist, aber es ist mehr Arbeit, insbesondere wenn es in Unterverzeichnissen umgeschrieben werden kann (z. B. eine andere Instanz der cms in einem Unterordner)
Rich Jenks