Frage Nginx leitet einen Pfad zum anderen um


Ich bin mir sicher, dass dies schon einmal gefragt wurde, aber ich kann keine Lösung finden, die funktioniert.

Eine Website hat die CMS-Dienste gewechselt, hat aber die gleiche Domain. Wie richte ich ein nginx-Neuschreiben für eine einzelne Seite ein?

Z.B.

Alte Seite

http://sitedomain.co.uk/content/unique-page-name

Neue Seite

http://sitedomain.co.uk/new-name/unique-page-name

bitte beachten SieIch möchte nicht, dass alles innerhalb der Inhaltsseite umgeleitet wird, sondern buchstäblich nur die oben erwähnte URL. Ich habe etwa 9 Weiterleitungen einzurichten, von denen keines in ein Muster passt.

Vielen Dank!

Edit: Ich habe diese Lösung gefunden, die anscheinend funktioniert, außer dass sie ohne Schrägstrich umgeleitet wird:

if ( $request_filename ~ content/unique-page-name/ ) {
   rewrite ^ http://sitedomain.co.uk/new-name/unique-page-name/? permanent;
}

Aber das führt zu:

http://sitedomain.co.uknew-name/unique-page-name/


38
2017-10-25 09:06


Ursprung




Antworten:


Direktes Zitat von Fallstricke und häufige Fehler: Bestechungsschreiben:

Mit der Return-Direktive können wir die Auswertung von regulären Ausdrücken vollständig vermeiden.

Benutzen Sie bitte return anstatt rewrite für permanente Weiterleitungen. Hier ist meine Herangehensweise an diesen Anwendungsfall ...

location = /content/unique-page-name {
  return 301 /new-name/unique-page-name;
}

66
2017-10-25 09:44



Es ist definitiv lesbarer. Bleibt dies auch bei Abfragen, die sich auf der ursprünglichen URL befanden? - SteveEdson
Nee. Es wird nicht. Wenn Sie Fragen zu permanenten Weiterleitungen wirklich behalten möchten, finden Sie in diesem kleinen Trick ... gist.github.com/pothi/7152399 - Pothi Kalimuthu
Habe ich recht, wenn ich das benutze? if Aussagen in Nginx ist schlecht? Wäre das immer noch eine bessere Übung als das Umschreiben? - SteveEdson
Verwenden if zusammen mit Rückführungsrichtlinie ist völlig in Ordnung. Sehen wiki.ninx.org/IfIsEvil . Ja, IMO, es ist besser als das Umschreiben. - Pothi Kalimuthu


Im Idealfall sollten Sie keine if-Anweisungen verwenden, wenn Sie es vermeiden können. So etwas könnte funktionieren (ungetestet).

location ~ /content/(.*)$ {
    rewrite ^ /new-name/$1?$args permanent;
} 

9
2017-10-25 09:17



Wäre das nicht alles im Content-Verzeichnis? Ich möchte nur den einzelnen Artikel umleiten. Zum Beispiel habe ich ein anderes Element im Inhaltsverzeichnis, aber ich muss es umleiten ... / another-new-name / unique-page-name2 - SteveEdson
Ich habe es gelöst. Stellt sich heraus, dass es korrekt umgeleitet wird, aber das Skript schlägt die URL nach. - SteveEdson
Ah, ich habe die Frage falsch verstanden. Ich dachte du wolltest nur den Inhaltsteil ändern. Das Prinzip bleibt gleich. Ich bin froh, dass es für dich arbeitet. - Gevious
Kein Problem, danke für die Hilfe, ich werde das definitiv in Zukunft brauchen. - SteveEdson


Ich habe folgende Lösung verwendet:

rewrite ^(/content/unique-page-name)(.*)$   http://sitedomain.co.uk/new-name/unique-page-name/$2 permanent;

Funktioniert gut.


9
2017-10-25 09:32



Dies sollte die richtige Antwort sein. Keine Notwendigkeit für ein nutzloses location Block. - PKHunter


Für mich funktionierte es ohne das Gleichheitszeichen so:

location /old-url {
  return 301 /new-url;
}

5
2018-02-04 12:26



Sie benötigen den Standortblock überhaupt nicht. Benutz einfach rewrite. Siehe @ SteveEdisons Antwort. - PKHunter