Redirection des anciennes URL de forum vers les nouvelles URL Discourse à l’aide de permaliens
Si vous êtes passé d’un autre logiciel de forum à Discourse en utilisant l’un de nos scripts d’importation, vous voudrez probablement que tous vos précieux résultats de recherche Google continuent de pointer vers le même contenu. Discourse dispose d’un moyen intégré pour gérer cela pour vous, comme alternative à l’écriture de règles nginx, en utilisant la table de recherche de permaliens.
La table de permaliens vous permet de définir deux choses : une URL à faire correspondre et ce que cette URL doit afficher. Il existe quelques options pour définir où l’URL doit rediriger. Définissez l’une des options suivantes :
topic_id : pour afficher un sujet
post_id : pour afficher un message spécifique dans un sujet
category_id : pour afficher une catégorie
tag_id : pour afficher une étiquette (tag)
user_id : pour afficher un profil utilisateur
external_url : pour rediriger vers une URL qui pourrait ne pas appartenir à votre instance Discourse
Par exemple, si les URL de sujets de votre ancien forum ressemblaient à http://example.com/discussion/12345, et que l’URL de ce sujet après l’importation est http://example.com/t/we-moved/987, vous pouvez configurer le mappage comme suit :
cd /var/discourse
./launcher enter app
rails c
Permalink.create(url: '/discussion/12345', topic_id: 987)
Discourse effectuera alors une redirection avec le code de statut de réponse http 301 (déplacé de façon permanente) vers l’URL correcte pour l’identifiant de sujet 12345. Le 301 devrait inciter les moteurs de recherche à mettre à jour leurs enregistrements et à commencer à utiliser les nouvelles URL.
Si vous souhaitez que certaines URL soient redirigées loin de Discourse, vous pouvez le faire en définissant external_url :
Est-il possible de stocker la règle de réécriture directement dans le cluster Docker de Discourse ? Il y a un serveur web qui gère le HTTP et le SSL, puis-je y ajouter quelque chose ?
Je ne vois pas comment cela peut fonctionner puisque nginx ne connaît pas les nouveaux identifiants de sujet. Les identifiants /threads doivent être convertis en identifiant de sujet Discourse.
Si j’appelle /threads/name.1234, il est réécrit en /t/name, puis il m’affiche le bon post, l’identifiant n’est pas utilisé à ce moment-là, je viens de tester cela.
Probablement seulement quand vous avez de la chance et que Discourse et votre ancien forum génèrent les mêmes slugs (et que le slug ne commence pas par un nombre), mais c’est probablement suffisant.
Si vous voulez changer NGINX comme vous le suggérez, vous pouvez regarder le modèle web dans discourse_docker pour voir comment changer la configuration nginx à l’intérieur du conteneur. Voici un exemple :
Non. Vous l’ajouterez à votre app.yml et il sera appliqué à chaque reconstruction.
Pour gagner du temps lors des tests, vous pourriez :
cd /var/discourse
./launcher enter app
apt update
apt-get install -y vim nano
Ensuite, utilisez vim ou nano pour modifier ce que vous voulez voir et vérifier qu’il fait ce que vous pensez (et économiser 10-20 minutes par reconstruction). Vous pouvez redémarrer nginx avec sv restart nginx.
Rien de ce qui précède n’a été testé, mais cela devrait être proche.