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.

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>

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.