Empêcher l'héritage des règles de réécriture d'URL par les sous-répertoires dans IIS7

11

J'ai une configuration de réécriture d'URL pour des URL propres dans un CMS et mon web.config ressemble à ceci:

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

Il se transforme essentiellement index.php?id=somethingen somethingURL propres. Très simple et ça marche bien.

Comme cela est courant dans les CMS, pour éviter que le back-end ne se casse, chaque sous-répertoire requiert l'un <remove name="Clean URLs" />ou l' autre <clear />de son web.config afin que la règle ne soit pas héritée.

Existe-t-il un moyen de spécifier dans la règle parent qu'elle ne devrait pas du tout être héritée par ses enfants en limitant en quelque sorte la portée de la règle au seul répertoire actuel? Quelque chose comme ça <rule name="Clean URLs" stopProcessing="true" inherit="no">serait épique.

Rich Jenks
la source

Réponses:

6

J'ai récemment rencontré ce problème, dans une situation similaire. Mais la réponse de rjenkins semblerait poser des problèmes avec les applications virtuelles qui reposaient sur l'héritage des paramètres parents.

Si vous connaissez le nom de la règle de réécriture, vous pouvez simplement le faire:

<rewrite>
  <rules>
    <remove name="RewriteNameToDisable" />
  </rules>
</rewrite>
Bryan Way
la source
2
C'était ma première tentative, mais vous devez le mettre dans le web.config pour chaque sous-répertoire et ce n'est pas toujours pratique. Je suis d'accord, c'est plus propre, mais c'est plus de travail, surtout quand il peut y avoir des réécritures dans les sous-répertoires (par exemple une autre instance des cms dans un sous-dossier)
Rich Jenks