Nous avons récemment remplacé la plupart de nos pages par défaut de default.htm à default.asp.
Les règles de réécriture fonctionnent correctement s'il s'agit d'un sous-dossier, par exemple example.com/help/default.asp où le default.htm a été supprimé. Si je tape domain.com/help/default.htm, il affiche correctement la nouvelle page .asp et non 404 car le default.htm n'existe plus.
À la racine, entrer example.com/default.htm ne redirige pas vers default.asp au lieu d'envoyer l'utilisateur à la page 404 que nous avons créée.
Correspondance exacte essayée par rapport au caractère générique, aucune différence.
Pourquoi le 404 et pas de redirection?
<rule name="homepage" patternSyntax="Wildcard" stopProcessing="true">
<match url="*example.com/default.htm" ignoreCase="true" />
<action type="Redirect" url="http://www.example.com/default.asp" redirectType="Permanent" />
</rule>
PDATE: Cela fonctionne sur une redirection de sous-dossier de htm vers asp:
<rule name="downloadhome" patternSyntax="Wildcard" stopProcessing="true">
<match url="*download/default.htm" ignoreCase="true" />
<action type="Redirect" url="/download/default.asp" redirectType="Permanent" />
</rule>
<match url="*example.com/default.htm" ignoreCase="true" />
Je pense que l'attribut url
correspond uniquement au chemin URL, pas au nom d'hôte. Donc, ce qui précède devrait se lire:
<match url="^default\.htm" ignoreCase="true" />
Cela correspond à "default.htm" à la racine du document, ou utilisez le modèle default\.htm
pour faire correspondre "default.htm" n'importe où.
Cela utilise patternSyntax="ECMAScript"
sur le <rule>
(pour utiliser des expressions régulières). Ou supprimez simplement l'attribut patternSyntax
, car il s'agit de l'option par défaut
Pour avoir une seule règle pour les deux scénarios: une demande pour la racine du document et un sous-répertoire, vous pouvez probablement faire quelque chose comme ceci à la place:
<rule name="replacedefaulthtm" stopProcessing="true">
<match url="(.*)default\.htm$" ignoreCase="true" />
<action type="Redirect" url="http://www.example.com/{R:1}default.asp" redirectType="Permanent" />
</rule>
Où {R:1}
est une référence arrière au sous-modèle capturé (.*)
dans la règle précédente.