Was ist der beste Weg, um alle URLs, die nicht mit einem Präfix beginnen, auf das angegebene Präfix umzuleiten?

Was ist der beste Weg, um alle URLs, die nicht mit einem Präfix beginnen, auf das angegebene Präfix umzuleiten?

Ich möchte alle URLs umgeleitet bekommen, dienichtBeginnen Sie mit dem Präfix /abcd/->, /abcd/wobei Sie berücksichtigen sollten, dass der Server verwendet proxy_pass.

server {
        location / {

                proxy_pass http://upstream-server/;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;

                if ($request_uri = "/"){
                        return 301 /abcd/;
                }
        }
}

Ich denke daran, reguläre Ausdrücke und Negationen etwa wie folgt zu verwenden:

location ~ ^/(?!abcd.*).*$ {
          return 301 /abcd/;
}

Gibt es eine andere/bessere Lösung?

Antwort1

Ich denke, das ist komplexer als nötig. Nginxwertet ausvom spezifischsten Block bis hinunter zum unspezifischsten.

In diesem Beispiel geht alles, was mit /abcd übereinstimmt, an den Proxy_Pass-Block, alles andere geht an den /-Block, der umgeleitet wird.

Ich habe das nicht getestet. Probieren Sie es aus und wenn es nicht funktioniert, kann ich weiter darüber nachdenken.

location /abcd {
     proxy_pass (etc);
}

location / {
      return 301 /abcd/;
}

verwandte Informationen