La redirection et réécriture d’URL avec .Net Core

Une fois le blog publié sur Azure, une de mes premières problématiques fut la redirection d’URL depuis .Net Core.

En effet, mon blog était accessible depuis 3 URL différentes, et pour des soucis de SEO et d’harmonisation, il fallait que le blog ne réponde que sur http://joelpintoribeiro.com .

Microsoft a publié un packet Nuget bien utile pour répondre à cette problématique :

Microsoft.AspNetCore.Rewrite récupérable à cette adresse https://www.nuget.org/packages/Microsoft.AspNetCore.Rewrite/

Ce packet Nuget va vous simplifier la vie, il embarque en effet plusieurs méthodes qui remplissent la plupart des besoins de redirection ou de réécriture d’URL.

Petit rappel de la différence entre la redirection d’URL et la réécriture d’URL :

- La redirection d’URL, comme son nom l’indique, va rediriger le client vers une autre URL, avec souvent un code statut (301 pour permanent), c’est utile lors d’un changement de domaine par exemple…

- La réécriture d’URL ne va pas rediriger le client, mais selon des règles de réécriture configurées à l’avance, va interpréter côté serveur la nouvelle URL et non l’URL tapée sur le navigateur. Ceci est transparent pour le client.

Dans mon cas, nous allons voir comment j’ai réussi à rediriger mes clients vers la bonne URL.

Utilisation du packet Nuget

La configuration de notre outil va se faire dans le Startup.cs de notre application et plus précisément dans la méthode “Configure”.

Il faut y déclarer une classe “RewriteOptions” qui contiendra toutes nos règles de redirection et réécriture et la donner comme paramètre de notre service UseRewriter.

use

/!\ Il faut absolument que le UseRewriter soit appelé AVANT  le UseStaticFiles, autrement les règles de redirection vont se faire court-circuiter par ce module et ne marcheront jamais.

Les différentes redirections

AddRedirect

En premier paramètre nous avons l’expression régulière qui sera analysée pour la redirection d’URL  et en deuxième paramètre la chaîne de remplacement. Enfin, en 3ème paramètre, il est possible de renseigner le code de la redirection (dans cet exemple 301 pour permanent).

addredirect

AddRewrite

Comme pour la redirection , le premier paramètre est une expression régulière, et le 2eme la chaîne de remplacement. En dernier paramètre, nous pouvons lui indiquer s’il doit continuer les règles suivantes ou non. 

addrewrite

AddRedirectToHttpsPermanent()

Cette méthode indique simplement au moteur de redirection qu’il faut rediriger toutes les requêtes http vers des requêtes https .

redirecthttps

Et si rien de tout cela nous convient ?

Pour des règles un peu plus compliquées, il est possible d’ajouter et de coder ses propres règles, c’est d’ailleurs ce que j’ai utilisé pour effectuer mes redirections.

Pour cela il suffit de créer une classe implémentant l’interface “IRule”, et la donner en paramètre de la méthode AddRule de RewriteOptions.

Voici l’exemple que j’ai mis en place pour mon cas :

redirect

Dans mon implémentation je vérifie trois choses .

1) Que ma requête ne se fait pas sur le protocole “www”

2) Que ma requête contient bien mon URL de site

3) Que je ne suis pas en mode “localhost”

Si une de ces règles est vraie, je ne redirige pas. Sinon, je redirige la requête vers mon URL en http .

De cette façon, toute les requêtes se font bien sur le protocole http et non www.

Pour plus d’informations, vous pouvez consulter la documentation officielle de Microsoft sur https://docs.microsoft.com/en-us/aspnet/core/fundamentals/url-rewriting .