Lorsqu'une page Web a été déplacée vers un nouvel emplacement, comment puis-je afficher la page Web déplacée ET renvoyer un code d'état de réponse HTTP de redirection permanente 301 dans Django?Comment afficher une page Web déplacée du visiteur ET renvoyer un code d'état de réponse HTTP de redirection 301 dans Django?
Répondre
from django import http
return http.HttpResponsePermanentRedirect('/yournewpage.html')
le navigateur obtenir le 301, et aller à /yournewpage.html
comme prévu. l'autre réponse est techniquement correcte, en ce que python ne gère pas la redirection en soi, le navigateur est. c'est ce qui se passe sous le capot:
Browser Python HTTP
-------------------> GET /youroldpage.html HTTP/1.1
<------------------- HTTP/1.1 301 Moved Permanently
Location: /yournewpage.html
-------------------> GET /yournewpage.html HTTP/1.1
Vous ne pouvez pas.
301 est un code de retour HTTP directement géré par le navigateur. De nombreux sites traitent ces deux problèmes en envoyant d'abord l'utilisateur à une page de redirection qui informe l'utilisateur de la modification, puis X secondes plus tard les envoie à la nouvelle page. Mais la page de redirection doit avoir un code 200.
Une petite variante est de détecter les araignées des moteurs de recherche (par IP et/ou agent utilisateur) et de donner les les 301. De cette façon, les résultats de recherche pointent vers votre nouvelle page.
Vous pouvez réellement retourner une page HTML dans une redirection 301 ou autre. Il sera rendu par les user-agents trop vieux pour comprendre le résultat - c'est-à-dire les navigateurs HTTP/0.9, qui n'existent pratiquement plus. – bobince
Je ne le savais pas! Bien sûr, je ne me préoccupe pas des navigateurs aussi vieux, mais quand même, c'est intéressant. –