
mein Conf-Code:
index index.html index.php;
location / {
if ($uri = '/a/') {
return 301 https://example.com/a;
}
try_files $uri $uri/ =404;
}
Wenn die URL lautet , wird aus dem Teil, der am Ende hinzugefügt wird, /a/
301 zu ./a
try_files
/
/a
/a/
Als nächsten Schritt wird meiner Meinung nach die index
Definition versucht, zu werden /a/index.html
und die Datei zu erreichen.
Aber tatsächlich versucht es /a/
, und springt aus dem heraus location
, um dann wieder hineinzugehen location
, um if ($uri = '/a/') { ... }
.
Dann eine Endlosschleife.
Warum? Ich war einfach verwirrt.
Was ich tun möchte, ist
- Wenn angefordert
example.com/a/
, springen Sie zuexample.com/a
, dann zu 2 - Wenn angefordert
example.com/a
, anzeigenexample.com/a/index.html
(aber URL istexample.com/a
).
Kann mir jemand helfen, das zu erreichen?
Antwort1
Es tut genau das, was es tun soll.
Sie können nie dorthin gelangen, /a/index.html
weil Sie immer wieder zurück zu umleiten, /a
bevor dies überhaupt passieren kann. Wenn nginx dies verarbeitet, sieht es das Verzeichnis im Dateisystem und leitet automatisch (korrekt) zu um /a/
.
Sie sollten diese unangemessene Weiterleitung entfernen.
Antwort2
Willkommen bei ServerFault. Sie können das im OP erwähnte mit dem folgenden Code tun ...
location / {
if ($uri = '/a/') {
return 301 https://example.com/a;
}
try_files $uri $uri/index.html =404;
}
Die entsprechende Frage und die akzeptierte Antwort finden Sie unterEntfernen des abschließenden Schrägstrichs aus einer URL mit nginx.
Grundsätzlich sind wir nicht darauf angewiesen und können direkt bei Bedarf index
aushelfen .index.html
example.com/a