Umleiten von /: id nach /: friendly_id

8

Ist es möglich, eine 301-Weiterleitung zu erzwingen, wenn jemand versucht, mit der alten /:id -URL statt mit dem bevorzugten /:friendly_id -Link zu einer Seite zu blättern?

Offenbar helfen solche Weiterleitungen Google zu sagen, dass Sie den Link aktualisiert haben , damit der alte nicht-freundliche Link nicht mehr angezeigt wird.

    
Abram 16.02.2014, 23:35
quelle

5 Antworten

14

Mit der neuesten Version von friendly_id (5.0.3 zum Zeitpunkt der Erstellung dieser Antwort) und Rails 4 mache ich dies in der Steuerung:

%Vor%

Hier ist eine Beschreibung der redirect_to -Zeile, Stück für Stück zerlegt:

  • action: action_name behält die Aktion bei, mit der du eine Verbindung herstellst (die angezeigt, bearbeitet, aktualisiert oder gelöscht werden kann, basierend auf dem before_action , das vorhanden ist). Wenn du auf /items/1/edit zugreifst, wirst du zu% weitergeleitet Code%
  • /items/pretty-url/edit stellt sicher, dass die URL, an die Sie weitergeleitet werden, die hübsche URL
  • ist
  • id: @item.friendly_id setzt die Weiterleitung auf den Status 301, für SEO
  • status: 301 stellt sicher, dass wir keine Personen umleiten, die auf unless @item.friendly_id == params[:id] über ihre hübsche URL zugreifen
James Chevalier 30.04.2014, 15:30
quelle
2

hat gerade die Umleitung innerhalb der routes-Datei definiert

%Vor%     
nickcen 17.02.2014 01:16
quelle
1

Routen

Ich glaube nicht, dass Ihre Routen hier das Problem sind

Das Problem ist die Backend-Behandlung der Route (I.E, ob es friendly_id verwendet oder nicht). Alles, was Google sehen wird, ist dies:

%Vor%

Wenn beide Routen funktionieren, wird Google glücklich sein. Ich denke, Sie spielen auf die Idee an, dass Sie, wenn Sie die Routen so ändern, dass nur your_user gehandhabt wird, Google dazu bringen müssen, die Weiterleitungen zu schätzen.

Weiterleitungen

Wenn Sie bedenken, dass Sie sowohl id als auch slug im Backend behandeln können (wir haben Code dafür, wenn Sie wollen), würde ich Redirects mit ActionDispatch::Routing::Redirection Klasse:

%Vor%     
Richard Peck 17.02.2014 10:40
quelle
1

Während die Antwort von James Chevalier korrekt ist, können Sie diese Methode zum ApplicationController extrahieren, um sie mit jedem Modell zu verwenden, das FriendlyId verwendet:

%Vor%

Wie Sie sehen können, ist es auch nicht notwendig, einen bestimmten action Schlüssel an redirect_to zu übergeben. Wenn Sie ein Rails-Modell an redirect_to übergeben, wird automatisch versucht, auf die Aktion show auf der zugehörigen Sammlungsressourcenroute zuzugreifen (vorausgesetzt, sie ist auf diese Weise eingerichtet). Das bedeutet auch, dass es nicht notwendig ist, einen Schlüssel id zu übergeben, da FriendlyId immer den letzten Slug im #to_param des Modells zurückgibt.

Ich bin kein großer Fan von unless (verwirrende Semantik). Ich neige dazu, mich davor zu scheuen, aber das ist eher meine persönliche Vorliebe.

    
Olivier Lacan 20.04.2016 00:19
quelle
0

Ja, es ist möglich, dass Sie beide Routen auf Ihrem config/routes.rb

definieren müssen %Vor%

Dann müssen Sie in Ihrer Legacy-Methode action ein

angeben %Vor%

Dies erzeugt einen 301 Response-Code. Das wird schließlich Bots veranlassen, Ihr neues Muster zu treffen, ohne Ihren Traffic oder Ihre Indexierung (SEO) zu verlieren.

    
xlembouras 20.02.2014 09:23
quelle

Tags und Links