Aller au contenu

Redirections

Le système de redirections d’ArtisanCMS permet de gérer les redirections d’URL de manière centralisée. Il est particulièrement utile lors de changements d’URL, de restructurations de site ou de migrations depuis un autre CMS.

Le modèle Redirect (App\Models\Redirect) représente une règle de redirection :

ChampTypeDescription
source_urlstringURL d’origine (chemin relatif)
target_urlstringURL de destination
status_codeintegerCode HTTP (301 ou 302)
is_activebooleanRedirection active ou inactive
hit_countintegerNombre de fois déclenchée
last_hit_atdatetimeDernière utilisation
site_idintegerSite associé (multi-site)
created_atdatetimeDate de création

La redirection 301 indique aux moteurs de recherche que l’URL a changé définitivement. Le “jus SEO” de l’ancienne URL est transféré vers la nouvelle :

/ancien-article → /blog/nouvel-article (301)

Utilisez ce type pour :

  • Les changements de slug permanents
  • Les restructurations d’arborescence
  • Les migrations depuis un ancien CMS

La redirection 302 indique un changement temporaire. Les moteurs de recherche conservent l’ancienne URL dans leur index :

/promo-ete → /promotions/ete-2026 (302)

Utilisez ce type pour :

  • Les pages temporairement déplacées
  • Les redirections saisonnières
  • Les pages en maintenance

Le middleware HandleRedirects intercepte chaque requête entrante et vérifie si une redirection correspond :

class HandleRedirects
{
public function handle(Request $request, Closure $next): Response
{
$redirect = $this->findRedirect($request->getPathInfo());
if ($redirect) {
$redirect->increment('hit_count');
$redirect->update(['last_hit_at' => now()]);
return redirect($redirect->target_url, $redirect->status_code);
}
return $next($request);
}
}

Le middleware est enregistré dans le groupe de routes web et s’exécute sur chaque requête. Les redirections sont mises en cache pour minimiser l’impact sur les performances.

Le Admin\RedirectController fournit l’interface de gestion :

Route::resource('redirects', RedirectController::class);
Route::post('redirects/import', [RedirectController::class, 'import']);

L’interface d’administration permet de :

  1. Saisir l’URL source (chemin relatif, ex: /ancien-chemin)
  2. Saisir l’URL cible (chemin relatif ou URL absolue)
  3. Choisir le code de statut (301 ou 302)
  4. Activer ou désactiver la redirection

La liste des redirections affiche :

  • L’URL source et cible
  • Le code de statut
  • Le nombre de hits et la date du dernier hit
  • Le statut actif/inactif

Les redirections peuvent etre filtrées par statut et triées par nombre de hits.

Pour les migrations, un import CSV permet de créer plusieurs redirections simultanément :

source_url,target_url,status_code
/old-page,/new-page,301
/ancien-blog/post-1,/blog/post-1,301
/contact-us,/contact,301

Lors du passage d’un CMS comme WordPress ou Joomla vers ArtisanCMS, les URL changent souvent. Créez des redirections 301 pour chaque ancienne URL afin de conserver le référencement :

/wp/2024/03/mon-article → /blog/mon-article (301)
/index.php?id=42 → /a-propos (301)

Lorsqu’un éditeur modifie le slug d’une page, une redirection peut etre créée automatiquement pour maintenir les anciens liens fonctionnels.

Lors d’un changement d’arborescence :

/services/web-design → /creation-web (301)
/services/seo → /referencement-naturel (301)

Le RedirectObserver invalide le cache des redirections à chaque modification :

class RedirectObserver
{
public function saved(Redirect $redirect): void
{
Cache::tags(['redirects'])->flush();
}
public function deleted(Redirect $redirect): void
{
Cache::tags(['redirects'])->flush();
}
}

Cela garantit que les nouvelles redirections sont prises en compte immédiatement sans nécessiter de vider manuellement le cache.

Le compteur hit_count et le champ last_hit_at permettent de suivre l’utilisation de chaque redirection. Cela aide a identifier :

  • Les redirections les plus sollicitées
  • Les redirections obsolètes qui ne sont plus utilisées
  • Les anciennes URL que les visiteurs tentent encore d’atteindre