Je ne comprends rien à IIS, mais j'essaie de résoudre ce problème de redirection de tous les visiteurs vers domain.com/page vers domain.com/page.html.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.webServer>
<rewrite>
<rewriteMaps>
<rewriteMap name="StaticRedirects">
<add key="/page" value="/page.html" />
</rewriteMap>
</rewriteMaps>
</rewrite>
</system.webServer>
</configuration>
Quelques problèmes se posent:
1) Votre web.config existant: vous avez déclaré la carte de réécriture .. mais vous n'avez pas créé de règles qui l'utilisent. RewriteMap seul ne fait absolument rien.
2) Voici comment vous pouvez le faire (il n’utilise pas de cartes de réécriture - règles seulement, ce qui est correct pour un petit nombre de réécritures/redirections):
Cette règle fera SINGLE EXACT rewrite (redirect interne) /page
à /page.html
. L'URL dans le navigateur restera inchangé.
<system.webServer>
<rewrite>
<rules>
<rule name="SpecificRewrite" stopProcessing="true">
<match url="^page$" />
<action type="Rewrite" url="/page.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
Cette règle n ° 2 fera la même chose que ci-dessus, mais fera la redirection 301 (redirection permanente) où l'URL changera dans le navigateur.
<system.webServer>
<rewrite>
<rules>
<rule name="SpecificRedirect" stopProcessing="true">
<match url="^page$" />
<action type="Redirect" url="/page.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
La règle n ° 3 tentera d’exécuter cette réécriture pour TOUT URL s’il existe un tel fichier avec une extension .html (c.-à-d. Pour /page
il vérifiera si /page.html
existe, et si c'est le cas, une réécriture se produit):
<system.webServer>
<rewrite>
<rules>
<rule name="DynamicRewrite" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{REQUEST_FILENAME}\.html" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="/{R:1}.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
Je voulais juste souligner une chose qui manque dans la réponse de LazyOne (j'aurais juste commenté sous la réponse mais je n'ai pas assez de représentants)
Dans la règle n ° 2 pour la redirection permanente, il manque un élément:
redirectType="Permanent"
Donc la règle n ° 2 devrait ressembler à ceci:
<system.webServer>
<rewrite>
<rules>
<rule name="SpecificRedirect" stopProcessing="true">
<match url="^page$" />
<action type="Redirect" url="/page.html" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
Modifier
Pour plus d'informations sur l'utilisation du module URL Rewrite, consultez cette excellente documentation: Référence de configuration du module URL Rewrite
En réponse à la question @kneidels des commentaires; Pour correspondre à l'URL: topic.php?id=39
quelque chose comme ce qui suit pourrait être utilisé:
<system.webServer>
<rewrite>
<rules>
<rule name="SpecificRedirect" stopProcessing="true">
<match url="^topic.php$" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="(?:id)=(\d{2})" />
</conditions>
<action type="Redirect" url="/newpage/{C:1}" appendQueryString="false" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
Cela correspondra à topic.php?id=ab
où a
est un nombre quelconque compris entre 0-9
et b est également un nombre quelconque compris entre 0-9
. Il sera ensuite redirigé vers /newpage/xy
où xy
provient de l'URL d'origine. Je n'ai pas testé cela mais ça devrait marcher.
Je viens d’essayer cette règle, et cela fonctionnait avec l’hébergement GoDaddy puisqu’ils avaient déjà installé le module Microsoft URL Rewriting pour chaque compte IIS 7.
<rewrite>
<rules>
<rule name="enquiry" stopProcessing="true">
<match url="^enquiry$" />
<action type="Rewrite" url="/Enquiry.aspx" />
</rule>
</rules>
</rewrite>