web-dev-qa-db-fra.com

IIS URL REWRITE: Ajouter une barre oblique de fin sauf pour .html et .aspx

Ajout d'une barre oblique de fin à toutes les URL à travers IIS URL réécrire le module est largement répandu, mais comment est-ce que je Ajouter des exceptions pour les URL se termine par .html etc.aspx?

Aujourd'hui j'ai ceci:

<rule name="Add trailing slash" stopProcessing="true">
  <match url="(.*[^/])$" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    <!-- Doesn't seem to be working -->
    <!--<add input="{REQUEST_URI}" pattern="(.*?).html$" negate="true" />-->
    <!--<add input="{REQUEST_URI}" pattern="(.*?).aspx$" negate="true" />-->
  </conditions>
  <action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>
19
Seb Nilsson

Si vous voulez quelque chose de fait correctement, vous devez le faire vous-même, évidemment ...

Voici la solution à ma question:

<rule name="Add trailing slash" stopProcessing="true">
  <match url="(.*[^/])$" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    <add input="{REQUEST_FILENAME}" pattern="(.*?)\.html$" negate="true" />
    <add input="{REQUEST_FILENAME}" pattern="(.*?)\.aspx$" negate="true" />
  </conditions>
  <action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>

Mise à jour : J'ai blogué à ce sujet dans plus de détails .

24
Seb Nilsson

Variant les autres réponses, j'ai utilisé cela, donc je n'aurais donc pas à spécifier une liste des extensions de fichiers:

<!-- Ensure trailing slash -->
<rule name="Add trailing slash" stopProcessing="true">
  <match url="(.*[^/])$" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    <add input="{REQUEST_FILENAME}" pattern="(.*?)\.[a-zA-Z]{1,4}$" negate="true" />
  </conditions>
  <action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule> 
13
Giscard Biamby

Nous ajoutons de multiples extensions comme celle-ci:

<add input="{URL}" negate="true" pattern="((.+).(jpg|ico|gif|js|png|htm|css|html))" ignoreCase="true" />
3
Denis

Pour empêcher tous les fichiers d'avoir une barre oblique ajoutée, j'ai changé la règle de match à ceci:

<match url="^([^.]*[^/])$" />

Cela applique la règle uniquement aux chemins qui incluent un nombre quelconque de caractères non-points qui ne se termine pas dans une barre oblique. Donc, tout chemin qui comprend un point (par exemple xxx.html, xxx.aspx, etc.) serait exclu sans avoir besoin de règle de négation supplémentaire.

Vous recherchez la présence d'un point dans la règle du match m'a permis de supprimer complètement les règles de condition qui utilisent des types de correspondance isfile et isdirectory. Ces types de correspondance ne sont autorisés que dans les règles distribuées (Web.config), non dans les règles globales (applicationHost.config), donc j'avais été forcée de reproduire cette règle pour chaque site au lieu de l'appliquer à tous les sites à l'aide d'une règle globale. En modifiant la regex dans la règle de correspondance pour exclure les fichiers et en supprimant les conditions d'isfile et d'isdirectory, j'ai pu créer une règle globale au lieu d'avoir plusieurs règles distribuées.

1
Garland Pope

Pour empêcher la post, supprimer et d'autres REST Les appels de méthode sans barre oblique de fin de devenir une demande d'obtention erronée via la redirection envisagent d'ajouter la condition suivante:

<add input="{REQUEST_METHOD}" matchType="Pattern" pattern="GET" ignoreCase="true" />
0
Johan B

Cela a presque travaillé pour moi. Je devais le changer à

<add input="{URL}" pattern="(.*?)\.html$" negate="true" />
<add input="{URL}" pattern="(.*?)\.aspx$" negate="true" />

Sinon merci pour cela!

0
Colin Wiseman

Vous pouvez essayer ceci:

        <conditions>
            <add input="{URL}" pattern="(.*)\.(.*)$" negate="true" />
        </conditions>
0
MyPhuong Tran