Запобігати перезаписуванню правил 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 у підпапці)
Rich Jenks,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.