Evite que las reglas de reescritura de URL sean heredadas por subdirectorios en IIS7

11

Tengo una configuración de reescritura de URL para URL limpias en un CMS y mi web.config se ve así:

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

Básicamente se convierte index.php?id=somethingen somethingURL limpias. Muy simple y funciona bien.

Como es común en los CMS, para evitar que se rompa el back-end, cada subdirectorio requiere <remove name="Clean URLs" />o <clear />en su web.config para que la regla no se herede.

¿Hay alguna manera de especificar en la regla principal que sus hijos no deberían heredarlo limitando de alguna manera el alcance de la regla solo al directorio actual? Algo así <rule name="Clean URLs" stopProcessing="true" inherit="no">sería épico.

Rich Jenks
fuente

Respuestas:

6

Recientemente me encontré con este problema, en una situación similar. Pero la respuesta de rjenkins parece causar problemas con las aplicaciones virtuales que dependen de la herencia de la configuración principal.

Si conoce el nombre de la regla de reescritura, puede hacer esto:

<rewrite>
  <rules>
    <remove name="RewriteNameToDisable" />
  </rules>
</rewrite>
Bryan Way
fuente
2
Ese fue mi primer intento, pero hay que ponerlo en web.config para cada subdirectorio y eso no siempre es práctico. Estoy de acuerdo en que es más limpio, pero es más trabajo, especialmente cuando puede haber reescrituras en subdirectorios (por ejemplo, otra instancia de cms en una subcarpeta)
Rich Jenks