Redirection des anciennes URL de forum vers les nouvelles URL Discourse à l’aide des 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 résultats Google durement acquis continuent de pointer vers le même contenu. Discourse dispose d’un moyen intégré pour gérer cela pour vous, en alternative à la rédaction de règles nginx, en utilisant la table de correspondance des permaliens.
La table des 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 vers où l’URL doit rediriger. Définissez l’une de celles-ci :
topic_id : pour afficher un sujet
post_id : pour afficher un message spécifique dans un sujet
category_id : pour afficher une catégorie
external_url : pour rediriger vers une URL qui n’appartient peut-être pas à votre instance Discourse
Par exemple, si les URL de vos sujets de forum d’origine ressemblaient à http://example.com/discussion/12345, et que l’URL de ce sujet après l’importation est http://example.com/t/nous-avons-deplace/987, vous pouvez alors configurer la correspondance 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 d’état HTTP 301 (déplacé de façon permanente) vers la bonne URL pour le sujet id 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 redirigent hors 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.