Cette référence explique comment les permaliens Discourse redirigent les anciens chemins d’URL vers de nouvelles destinations, comment fonctionnent les normalisations de permaliens, et comment tester et résoudre les problèmes de redirection après une migration ou un changement de structure d’URL.
Niveau utilisateur requis : Administrateur
L’accès à la console n’est requis que lors de la création de permaliens à partir d’un programme d’importation, d’un script ou de la console Rails.
Lorsque vous migrez depuis un autre forum ou modifiez la structure d’URL de votre site, les anciens liens provenant des moteurs de recherche, des signets, des e-mails ou d’autres sites web peuvent ne plus pointer vers la bonne page.
Les permaliens vous permettent de rediriger les anciens chemins d’URL vers leurs nouvelles destinations en utilisant des redirections 301 Moved Permanently (Déplacé de façon permanente).
Les permaliens sont des mappages de chemins exacts. Par exemple, si cette ancienne URL ne fonctionne plus :
https://discourse.example.com/forum/topic/123
vous pouvez créer un permalink afin qu’il redirige vers le nouveau sujet :
https://discourse.example.com/t/welcome-to-our-community/456
Que sont les permaliens
Un permalink est une correspondance exacte entre un ancien chemin d’URL et une nouvelle destination.
Par exemple :
forum/topic/123 → /t/welcome-to-our-community/456
Les permaliens sont utiles lorsque :
- vous avez migré depuis une autre plateforme de forum
- d’anciens liens sont indexés par les moteurs de recherche
- d’anciens liens sont utilisés dans des e-mails, de la documentation ou d’autres sites web
- vous avez modifié la structure des URL de votre site
- vous souhaitez qu’un ancien chemin redirige vers un sujet, un message, une catégorie, un tag, un utilisateur ou une URL externe
Chaque URL de permalink correspond à une seule destination.
Les permaliens sont des correspondances exactes. Le champ URL du permalink ne prend pas en charge les caractères génériques (wildcards) ni les expressions régulières. Si de nombreuses anciennes URL suivent un modèle prévisible, utilisez les normalisations de permaliens pour transformer les URL entrantes avant la recherche exacte du permalink.
Permalinks et normalisations
Les permaliens et les normalisations font des choses différentes :
| Fonctionnalité | Ce qu’elle fait | Exemple |
|---|---|---|
| Permalink | Redirige un ancien chemin enregistré vers une destination | old/topic/123 → Sujet 456 |
| Normalisation | Modifie le chemin entrant avant la recherche du permalink | old/topic/123-title → old/topic/123 |
Une normalisation ne redirige pas par elle-même. Elle modifie uniquement le chemin utilisé pour rechercher un permalink enregistré.
Vous avez toujours besoin d’un permalink correspondant une fois la normalisation appliquée.
Exemples rapides
Rediriger une ancienne URL de sujet
Ancienne URL :
https://discourse.example.com/forum/topic/123
URL du permalink :
forum/topic/123
Type de destination :
Sujet
Destination :
456
Résultat :
/forum/topic/123 → /t/welcome-to-our-community/456
Rediriger une ancienne URL avec une chaîne de requête
Ancienne URL :
https://discourse.example.com/viewtopic.php?t=123
URL du permalink :
viewtopic.php?t=123
Type de destination :
Sujet
Destination :
456
Résultat :
/viewtopic.php?t=123 → /t/welcome-to-our-community/456
Rediriger de nombreuses anciennes URL avec le même modèle
Anciennes URL :
/forum/support/123-how-do-i-reset-my-password.html
/forum/general/456-how-do-i-change-my-email.html
Vous pouvez utiliser une normalisation pour les simplifier avant la recherche :
/forum/support/123-how-do-i-reset-my-password.html → forum/123
/forum/general/456-how-do-i-change-my-email.html → forum/456
Puis créez des permaliens exacts :
forum/123 → Sujet 1001
forum/456 → Sujet 1002
Que saisir comme URL de permalink
Saisissez l’ancien chemin, et non l’URL complète.
Par exemple, utilisez :
forum/topic/123
ou :
/forum/topic/123
N’utilisez pas l’URL complète de l’ancienne URL :
https://discourse.example.com/forum/topic/123
Les barres obliques initiales sont acceptées, mais elles sont supprimées lors de l’enregistrement du permalink. Ces deux entrées sont équivalentes :
/forum/topic/123
forum/topic/123
Les deux sont stockées sous la forme :
forum/topic/123
Les espaces en début et en fin de chaîne sont supprimés lors de l’enregistrement du permalink.
Les chaînes de requête font partie de la correspondance
Les permaliens correspondent au chemin de la requête complet, y compris la chaîne de requête.
Cela signifie que ces deux URL sont des correspondances de permalink différentes :
/old/topic/123
/old/topic/123?utm_source=example
Si l’ancienne URL contient une chaîne de requête, soit :
- créez un permalink qui inclut la chaîne de requête, ou
- utilisez une normalisation de permalink pour supprimer ou simplifier la chaîne de requête avant la correspondance
Pour la plupart des paramètres d’analyse ou de suivi, l’utilisation d’une normalisation est généralement préférable à la création de nombreux permaliens distincts.
Par exemple, ce permalink enregistré :
docs/123
ne correspond pas nécessairement à cette URL demandée :
/docs/123?utm_source=newsletter
à moins qu’une normalisation ne supprime la chaîne de requête avant la recherche.
Lors de la copie d’anciennes URL depuis des outils d’analyse, des rapports de console de recherche, des navigateurs ou des campagnes e-mail, vérifiez si des paramètres de suivi ont été ajoutés.
Les fragments d’URL ne font pas partie de la correspondance
Les fragments d’URL ne sont pas envoyés au serveur.
Par exemple, cette URL :
/old/topic#post-12
arrive sur le serveur sous la forme :
/old/topic
Un permalink ou une normalisation ne peut pas correspondre à :
#post-12
à moins que le caractère # ne soit encodé dans la requête réelle sous la forme %23.
Destinations de permaliens prises en charge
Un permalink peut rediriger vers l’un des types de destination suivants :
- Sujet
- Message
- Catégorie
- Tag
- Utilisateur
- URL externe ou relative
Les destinations d’URL externe ou relative peuvent être utilisées pour des redirections telles que :
old/privacy-policy → https://archive.discourse.example.com/privacy
ou :
old/preferences → /my/preferences
Utilisez les destinations d’URL externe avec précaution. Elles redirigent les visiteurs hors de votre site et ne vérifient pas si l’URL cible existe.
Privilégiez les types de destination internes lorsque vous redirigez vers des sujets, messages, catégories, tags ou utilisateurs migrés. Utilisez une destination d’URL externe lorsque la page cible n’est pas représentée par un objet interne.
Ajouter un permalink manuellement
Pour ajouter un permalink manuellement :
- Accédez à
/admin/config/permalinks. - Sélectionnez l’onglet Permalinks.
- Cliquez sur Ajouter un permalink.
- Saisissez l’ancien chemin dans le champ URL.
- Sélectionnez le Type de permalink.
- Saisissez ou sélectionnez la destination.
- Enregistrez le permalink.
- Testez l’ancienne URL dans un navigateur ou avec
curl.
Exemple :
URL :
forum/topic/123
Type de permalink :
Sujet
Destination :
456
Une requête vers :
https://discourse.example.com/forum/topic/123
redirigera vers le sujet 456.
Valeurs de destination
La valeur de destination dépend du type de permalink.
| Type de permalink | Destination |
|---|---|
| Sujet | Un sujet |
| Message | Un message |
| Catégorie | Une catégorie |
| Tag | Un tag |
| Utilisateur | Un utilisateur |
| URL externe ou relative | Une URL externe complète ou un chemin relatif |
Exemples :
forum/topic/123 → Sujet 456
forum/post/789 → Message 789
forum/category/support → Catégorie support
forum/tag/example → Tag example
forum/user/alice → Utilisateur alice
old/privacy → https://archive.discourse.example.com/privacy
old/preferences → /my/preferences
Création de permaliens lors d’une migration
De nombreux programmes d’importation officiels créent automatiquement des permaliens pour les catégories, sujets, messages ou utilisateurs migrés.
Pour les grandes migrations, les permaliens sont généralement créés par le programme d’importation ou par un script de migration plutôt que saisis manuellement un par un.
Si vous rédigez un programme d’importation personnalisé, créez des enregistrements de permalink pour les anciennes URL qui doivent continuer à fonctionner après la migration.
Par exemple :
Permalink.create!(url: "discussion/12345", topic_id: 987)
Dans cet exemple, discussion/12345 est l’ancien chemin, et 987 est l’ID du sujet Discourse.
Une barre oblique initiale est également acceptée :
Permalink.create!(url: "/discussion/12345", topic_id: 987)
Les deux exemples stockent l’URL du permalink sous la forme :
discussion/12345
Pour rediriger vers une URL externe :
Permalink.create!(
url: "discussion/12345",
external_url: "https://archive.discourse.example.com/discussion/12345"
)
Lors de la création de permaliens dans un programme d’importation :
- stockez l’ancien chemin, et non le domaine ancien complet
- incluez la chaîne de requête uniquement si elle est nécessaire pour la correspondance
- assurez-vous que chaque ancien chemin correspond à une seule destination
- vérifiez les doublons avant d’insérer des enregistrements
- rappelez-vous que les URL de permalink doivent être uniques
Si vous effectuez plusieurs migrations de test, les ID finaux des sujets et des messages peuvent changer entre les exécutions. Générez ou vérifiez vos mappages de permalink finaux lorsque les données de migration en production sont stables.
Que sont les normalisations de permaliens
Une normalisation de permalink modifie un ancien chemin entrant avant de rechercher un permalink correspondant.
Les normalisations sont utiles lorsque de nombreuses anciennes URL suivent le même modèle prévisible.
Par exemple, supposons que votre ancien forum utilisait des URL comme celle-ci :
/forum/support/123-how-do-i-reset-my-password.html
mais que votre permalink enregistré est plus simple :
forum/123
Une normalisation peut transformer la requête entrante en chemin de permalink enregistré :
/forum/support/123-how-do-i-reset-my-password.html
↓
forum/123
Ensuite, le permalink peut rediriger :
forum/123 → /t/how-do-i-reset-my-password/456
Une normalisation ne redirige pas par elle-même. Elle modifie uniquement le chemin utilisé pour la recherche de permalink.
Vous avez toujours besoin d’un permalink correspondant pour le chemin normalisé.
La plupart des sites n’ont pas besoin de normalisations de permaliens. Utilisez-les uniquement lorsque de nombreuses anciennes URL suivent un modèle prévisible et que la création d’un permalink par ancienne URL serait peu pratique.
Comment les permaliens et les normalisations fonctionnent ensemble
Lorsqu’une ancienne URL est demandée, le processus est le suivant :
Le visiteur demande une ancienne URL
↓
Les normalisations de permalink sont appliquées, si configurées
↓
Une recherche de permalink est effectuée à l’aide du chemin résultant
↓
Si un permalink correspondant existe, le visiteur est redirigé
Par exemple :
URL demandée :
/old/topic/123?utm_source=newsletter
La normalisation la modifie en :
old/topic/123
Le permalink la redirige vers :
/t/new-topic-title/456
Ajouter une normalisation de permalink
Les normalisations de permalink sont configurées depuis les paramètres de permalink.
Pour en ajouter une :
- Accédez à
/admin/config/permalinks. - Sélectionnez l’onglet Paramètres.
- Ajoutez une règle au paramètre
permalink normalizations. - Enregistrez le paramètre.
- Testez une ancienne URL qui doit être normalisée.
- Confirmez que le chemin normalisé correspond à un permalink existant.
La syntaxe est :
/<regex>/<replacement>
Plusieurs règles sont séparées par |.
Par exemple :
/old\/topic\/(\d+).*/topic/\1
Cela peut transformer :
old/topic/123-my-old-title
en :
topic/123
Le remplacement utilise la syntaxe de remplacement Ruby, donc les groupes de capture s’écrivent :
\1
\2
\3
Règles importantes pour les normalisations
Gardez les règles de normalisation simples.
- Les normalisations utilisent des expressions régulières Ruby.
- Les caractères
/littéraux dans la partie regex doivent être échappés avec\/. - Les caractères
/littéraux dans la partie de remplacement n’ont pas besoin d’être échappés. - Plusieurs règles de normalisation sont séparées par
|. - Parce que
|sépare les règles, évitez d’utiliser l’alternance regex avec|. - Chaque règle utilise un seul remplacement, et non un remplacement global.
- Les règles sont appliquées dans l’ordre.
- Les règles correspondantes sont appliquées séquentiellement.
- Les normalisations sont appliquées avant la recherche de permalink.
- Les normalisations sont également appliquées lors de l’enregistrement des enregistrements de permalink.
- Le validateur de paramètre détecte les expressions régulières invalides, mais il peut ne pas détecter chaque règle qui se comporte différemment de ce qui est prévu.
Avertissement : Les normalisations sont appliquées lorsque les enregistrements de permalink sont enregistrés. Si vous saisissez une URL non normalisée dans l’interface d’administration, elle peut être stockée sous la forme du résultat normalisé. Si vous ajoutez ou modifiez des normalisations après avoir créé des permaliens, testez soigneusement et vérifiez comment les nouvelles URL de permalink enregistrées sont stockées.
Exemples de normalisation
Rediriger une ancienne URL avec du texte de titre supplémentaire
Anciennes URL :
/forum/support/123-how-do-i-reset-my-password.html
/forum/general/456-how-do-i-change-my-email.html
Vous pouvez les normaliser vers des chemins de permalink plus simples :
forum/123
forum/456
Exemple de normalisation :
/forum\/[^\/]+\/(\d+).*/forum/\1
Puis créez des permaliens :
forum/123 → Sujet 1001
forum/456 → Sujet 1002
Ignorer les chaînes de requête de suivi
URL demandée ancienne :
/docs/123?utm_source=newsletter
Permalink enregistré :
docs/123
Normalisation :
/(docs\/\d+)\?.*/\1
Cela supprime la chaîne de requête avant la recherche de permalink.
Préserver un paramètre de requête important
Certains anciens forums utilisent des paramètres de requête comme identifiant stable du sujet.
Par exemple :
viewtopic.php?f=10&t=123
viewtopic.php?t=123
Vous pouvez souhaiter normaliser ces URL vers :
viewtopic.php?t=123
Exemple de normalisation :
/(viewtopic\.php\?)(?:.*&)?(t=\d+).*/\1\2
Puis créez un permalink :
viewtopic.php?t=123 → Sujet 456
Redirections par regex et caractères génériques
Le champ URL de permalink ne prend pas en charge les regex ou les caractères génériques.
Cela ne fonctionnera pas en tant qu’URL de permalink :
forum/topic/*
Cela ne fonctionnera pas non plus en tant qu’URL de permalink :
forum/topic/(\d+)
Si vous avez besoin d’une gestion basée sur des modèles, utilisez une normalisation de permalink pour réécrire l’URL entrante sous une forme qui peut correspondre à un permalink enregistré exact.
Par exemple :
/forum/topic/123-title → forum/topic/123
Puis créez un permalink exact normal :
forum/topic/123 → Sujet 456
Précédence des routes et chemins intégrés
Le routage des permaliens est vérifié après les routes d’application normales.
Cela signifie qu’une route existante valide peut se résoudre normalement avant qu’un permalink ne soit vérifié.
Soyez prudent avec les anciennes URL qui commencent par des chemins intégrés tels que :
/t
/c
/u
/tag
/tags
Par exemple, une ancienne URL de forum comme celle-ci peut ressembler à une route de catégorie intégrée :
/c/blog/old-platform-url/ba-p/12345
Si une ancienne URL entre en conflit avec une route existante valide, la route valide peut prendre le dessus sur le permalink.
De même, si vous créez un permalink pour un chemin qui ressemble à une route de sujet existante, telle que :
t/123
la route de sujet normale peut être traitée avant la recherche de permalink.
Certaines routes intégrées de « non trouvé » ont un comportement de secours supplémentaire, mais vous ne devez pas compter dessus. Testez toujours les anciennes URL qui chevauchent les chemins intégrés.
Si vous souhaitez qu’une ancienne URL de sujet redirige vers ailleurs, l’ancienne sujet ne doit généralement plus se résoudre en tant que route de sujet valide.
Permissions et contenu privé
Les permaliens vers des destinations internes respectent les permissions normales.
Si un permalink pointe vers un sujet, message, catégorie, tag ou utilisateur privé ou restreint, les visiteurs qui ne peuvent pas accéder à cette destination recevront un 404 au lieu d’une redirection.
Les permaliens vers des URL externes ne vérifient pas les permissions de contenu interne.
Caractères spéciaux et URL encodées
Testez soigneusement les URL avec des caractères spéciaux.
Cela inclut les URL contenant :
- des espaces
+%&':- des parenthèses
- des caractères non latins
La correspondance des permaliens utilise le chemin de requête encodé après avoir supprimé la barre oblique initiale et appliqué les normalisations configurées. Les différences d’encodage peuvent empêcher une URL de correspondre au permalink que vous attendez.
Par exemple, ceux-ci peuvent ne pas être équivalents selon la façon dont l’ancienne URL est demandée et stockée :
old/topic/hello%20world
old/topic/hello+world
Utilisez %20 pour les espaces dans les exemples d’URL. Dans un chemin d’URL, + n’est pas identique à un espace.
Les caractères tels que &, ? et # ont une signification spéciale dans les URL. S’ils sont destinés à être des caractères de chemin littéraux, ils doivent être encodés en pourcentage.
En cas de doute, testez l’ancienne URL exacte que les utilisateurs ou les moteurs de recherche demanderont.
Limitations
Les permaliens sont conçus pour rediriger les anciens chemins vers de nouvelles destinations. Ils ne constituent pas un moteur de redirection ou de réécriture à usage général.
Limitations importantes :
- Les URL de permalink sont stockées sous forme de chemin et de chaînes de requête, et non d’URL complètes.
- Les URL complètes ne sont pas automatiquement converties en chemins.
- Les URL de permalink doivent être uniques après normalisation.
- Une URL de permalink ne peut avoir qu’une seule destination.
- Les destinations prises en charge se limitent aux sujets, messages, catégories, tags, utilisateurs et URL externes ou relatives.
- Les permaliens utilisent
301 Moved Permanently; il n’y a pas d’option par permalink pour302. - Le champ URL de permalink ne prend pas en charge les caractères génériques ou les expressions régulières.
- Les chaînes de requête font partie de la clé de recherche.
- Les fragments d’URL, tels que
#post-12, ne sont pas envoyés au serveur et ne peuvent pas être correspondus. - La correspondance n’utilise pas le schéma ou l’hôte de la requête.
- Les routes natives sont vérifiées avant la route de permaliens à tout capturer.
- Les destinations internes sont vérifiées pour les permissions.
- Les destinations d’URL externe contournent les vérifications de permissions de contenu interne.
- Les normalisations de permalink utilisent des expressions régulières Ruby.
- Les règles de normalisation sont séparées par
|, évitez donc d’utiliser|comme alternance regex. - Les règles de normalisation utilisent un seul remplacement par règle, et non un remplacement global.
- Les normalisations sont appliquées à la fois avant la recherche et avant l’enregistrement des enregistrements de permalink.
- Le validateur de paramètre détecte les expressions régulières invalides, mais il peut ne pas détecter chaque règle qui se comporte différemment de ce qui est prévu.
Pour la plupart des sites, des permaliens simples de type un-à-un sont plus faciles à maintenir que des règles de normalisation complexes. Utilisez les normalisations uniquement lorsque les anciennes URL suivent un modèle prévisible.
Évitez de rediriger chaque ancienne URL vers la page d’accueil
Ne redirigez pas toutes les anciennes URL vers votre page d’accueil.
Redirigez chaque ancienne URL vers la nouvelle page la plus pertinente. S’il n’y a pas de contenu équivalent, un 404 peut être préférable à l’envoi des utilisateurs et des moteurs de recherche vers une page non liée.
Les bonnes redirections sont spécifiques :
old/topic/123 → nouveau sujet sur le même sujet
Les mauvaises redirections sont génériques :
old/topic/123 → page d’accueil
old/topic/456 → page d’accueil
old/topic/789 → page d’accueil
Testez vos redirections
Après avoir créé des permaliens ou des normalisations, testez un échantillon d’anciennes URL.
Vous pouvez tester dans un navigateur, ou utiliser :
curl -I https://discourse.example.com/forum/topic/123
Une redirection de permalink fonctionnelle devrait retourner une redirection permanente similaire à :
HTTP/2 301
location: https://discourse.example.com/t/welcome-to-our-community/456
Testez des exemples de chaque modèle d’ancienne URL, y compris :
- anciennes URL de sujets
- anciennes URL de catégories
- anciennes URL de messages
- URL avec des chaînes de requête
- URL avec des caractères spéciaux
- URL issues des résultats de recherche
- URL issues d’anciens e-mails ou de la documentation
- URL qui commencent par des chemins intégrés comme
/t,/cou/u - redirections vers des URL externes
Dépannage
Si une ancienne URL ne redirige pas, vérifiez ces causes courantes :
- Confirmez que le permalink existe.
- Confirmez que l’URL du permalink est l’ancien chemin, et non le domaine ancien complet.
- Vérifiez si l’ancienne URL inclut une chaîne de requête.
- Si vous utilisez une normalisation, confirmez que le chemin normalisé correspond à un permalink enregistré.
- Vérifiez si une route intégrée prend le dessus.
- Vérifiez si la destination est privée ou restreinte.
- Vérifiez les différences d’encodage, telles que
%20vs+. - Vérifiez si une normalisation a modifié l’URL lors de l’enregistrement du permalink.
- Confirmez que le contenu a été migré.
- Testez avec l’ancienne URL exacte depuis un navigateur ou avec
curl -I.
Les problèmes les plus courants sont :
- saisie de l’URL complète de l’ancienne URL au lieu de l’ancien chemin
- chaînes de requête manquantes ou inattendues
- attente du fonctionnement des caractères génériques ou des regex dans le champ URL de permalink
- anciennes URL chevauchant les chemins intégrés
- destinations privées ou restreintes
- différences d’encodage
- normalisations modifiant le chemin de manière inattendue
Notes SEO
Après une migration, les moteurs de recherche peuvent signaler que les anciennes URL sont redirigées. C’est ce à quoi on s’attend si ces anciennes URL redirigent désormais vers les nouvelles pages correctes.
Pour de meilleurs résultats :
- redirigez les anciennes URL vers des nouvelles pages pertinentes
- évitez les chaînes de redirection inutiles
- évitez de rediriger de nombreuses URL non liées vers la page d’accueil
- maintenez les redirections en place assez longtemps pour que les utilisateurs et les moteurs de recherche se mettent à jour
- testez les URL importantes issues de votre ancien sitemap, de vos données d’analyse ou de la console de recherche