Предотвращение наследования правил перезаписи URL подкаталогами в IIS7

11

У меня есть настройка перезаписи URL для чистых URL в CMS, и мой web.config выглядит так:

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

Это в основном превращается index.php?id=somethingв somethingчистые URL. Очень просто и работает хорошо.

Как это часто бывает в CMS, для предотвращения выхода из строя серверной части каждый подкаталог требует либо один, <remove name="Clean URLs" />либо <clear />свой web.config, поэтому правило не наследуется.

Есть ли способ указать в родительском правиле, что оно не должно быть унаследовано его потомками, ограничив область действия правила только текущим каталогом? Нечто подобное <rule name="Clean URLs" stopProcessing="true" inherit="no">будет эпическим.

Рич Дженкс
источник

Ответы:

6

Я недавно столкнулся с этой проблемой, в аналогичной ситуации. Но ответ от rjenkins может вызвать проблемы с виртуальными приложениями, которые основаны на наследовании родительских настроек.

Если вы знаете имя правила перезаписи, вы можете просто сделать это:

<rewrite>
  <rules>
    <remove name="RewriteNameToDisable" />
  </rules>
</rewrite>
Брайан Уэй
источник
2
Это была моя первая попытка, но вы должны поместить это в web.config для каждого подкаталога, и это не всегда практично. Я бы согласился, что это чище, но это больше работы, особенно когда в подкаталогах могут быть перезаписи (например, другой экземпляр cms в подпапке)
Рич Дженкс