Ich versuche, eine Weiterleitung zu erstellen, um einen abschließenden Schrägstrich hinzuzufügen.
location / {
if($request_uri ~ ^([^.]*[^/])$){
return 301 https://$host$request_uri/;
}
}
Ich habe keine Ahnung, wie ich das Matching in „if“ durchführen kann. Wenn ich einfach eine Umleitung mit /- erstelle, funktioniert es, nur dieser reguläre Ausdruck scheint defekt zu sein.
AKTUALISIEREN
Umschreiben, ich habe es versucht
location / {
rewrite ^([^.]*[^/])$ $1/ permanent;
.....
}
Und
if ($http_x_forwarded_proto != "https") {
return 301 https://$host$request_uri;
}
funktioniert gut, leitet zu https weiter, ich wollte damit auch Regex erstellen
Antwort1
Das Problem wurde vor langer Zeit gelöst, aber ich sehe, dass viele Leute diese Frage prüfen. Wenn ich mich also recht erinnere, hatte ich diese Codezeile nicht und sie hat mich umgeleitet:
port_in_redirect off;
Ich weiß, ich habe die betreffenden Ports nicht erwähnt, es gibt keine Möglichkeit, darauf zu antworten, aber ich lasse es einfach hier, falls jemand dasselbe Problem hat
Antwort2
Wenn ich die Frage richtig verstehe, möchten Sie automatisch, ohne Verwendung einer 301-Weiterleitung,http://example.com/foo/index.htmlwenn die Anfrage ist fürhttp://example.com/fooohne abschließenden Schrägstrich?
Wenn ja, habe ich festgestellt, dass diese try_files-Konfiguration funktioniert:
try_files $uri $uri/index.html $uri/ =404;
- Der erste
$uri
entspricht genau der URI - Die zweite Option
$uri/index.html
entspricht einem Verzeichnis, das die Datei index.html enthält, wobei das letzte Element des Pfads dem Verzeichnisnamen entspricht, ohne abschließenden Schrägstrich. - Der dritte
$uri/
entspricht dem Verzeichnis - Die vierte
=404
gibt die 404-Fehlerseite zurück, wenn keines der vorhergehenden Muster übereinstimmt.
Antwort3
Dies scheint wie erwartet zu funktionieren:
location / {
if ($request_uri ~ ^([^.]*[^/])$) {
return 301 https://$host$request_uri/;
}
try_files $uri $uri/ /index.html;
....
}
Ich bin mir nicht sicher, ob der Unterschied zu dem, den Sie ausprobiert haben, besteht, außer dem Syntaxfehler, der aufgrund fehlender Leerzeichen in der if
Anweisung aufgetreten sein dürfte (könnte ein Tippfehler sein). … oder vielleicht liegt es daran, dass Sie andere Anweisungen haben, die Sie uns nicht zeigen und die diese hier überschreiben.