Impedire che le regole di riscrittura URL vengano ereditate dalle sottodirectory in IIS7


11

Ho una configurazione di riscrittura URL per URL puliti in un CMS e il mio web.config è simile al seguente:

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

Fondamentalmente si trasforma index.php?id=somethingin somethingURL puliti. Molto semplice e funziona bene.

Come è comune nei CMS, per impedire la rottura del back-end, ogni sottodirectory richiede uno <remove name="Clean URLs" />o <clear />nel suo web.config, quindi la regola non viene ereditata.

Esiste un modo per specificare nella regola padre che non dovrebbe essere ereditato dai suoi figli limitando in qualche modo l'ambito della regola solo alla directory corrente? Qualcosa del genere <rule name="Clean URLs" stopProcessing="true" inherit="no">sarebbe epico.

Risposte:



6

Di recente ho riscontrato questo problema, in una situazione simile. Ma la risposta di rjenkins sembrerebbe causare problemi con le applicazioni virtuali che si basavano sull'ereditarietà delle impostazioni padre.

Se conosci il nome della regola di riscrittura puoi semplicemente fare questo:

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

2
Quello è stato il mio primo tentativo, ma devi inserirlo nel file web.config per ogni sottodirectory e non è sempre pratico. Sono d'accordo che sia più pulito, ma è più lavoro, specialmente quando potrebbero esserci riscritture nelle sottodirectory (ad esempio un'altra istanza del cms in una sottocartella)
Rich Jenks,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.