web-dev-qa-db-fra.com

La règle de réécriture IIS 7 déclenche 404 plutôt que la redirection vers une nouvelle page

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>
3
SKidd
<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>

{R:1} est une référence arrière au sous-modèle capturé (.*) dans la règle précédente.

1
MrWhite