Zapobiegaj dziedziczeniu reguł przepisywania adresów URL przez podkatalogi w IIS7


11

Mam konfigurację przepisywania adresów URL dla czystych adresów URL w CMS, a mój plik web.config wygląda następująco:

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

Zasadniczo zmienia index.php?id=somethingsię somethingw czyste adresy URL. Bardzo prosty i działa dobrze.

Jak to zwykle w systemów redakcyjnych, w celu zapobieżenia ponownemu pękaniu koniec, każdy podkatalog wymaga albo <remove name="Clean URLs" />czy <clear />w pliku web.config tak reguła nie jest dziedziczona.

Czy istnieje sposób określenia w regule nadrzędnej, że jej potomki nie powinny w ogóle dziedziczyć, ograniczając zakres reguły tylko do bieżącego katalogu? Coś takiego <rule name="Clean URLs" stopProcessing="true" inherit="no">byłoby epickie.

Odpowiedzi:



6

Niedawno wpadłem na ten problem w podobnej sytuacji. Ale odpowiedź rjenkins wydaje się powodować problemy z aplikacjami wirtualnymi, które polegały na dziedziczeniu ustawień nadrzędnych.

Jeśli znasz nazwę reguły przepisywania, możesz po prostu to zrobić:

<rewrite>
  <rules>
    <remove name="RewriteNameToDisable" />
  </rules>
</rewrite>

2
To była moja pierwsza próba, ale musisz umieścić to w pliku web.config dla każdego podkatalogu, co nie zawsze jest praktyczne. Zgadzam się, że jest czystszy, ale to więcej pracy, szczególnie gdy może być przepisywanie w podkatalogach (np. Inne wystąpienie cms w podfolderze)
Rich Jenks
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.