Nginx leitet nicht vorhandene Dateien auf https mit try_files auf http um

7

Ich habe eine Weile nach dem richtigen Weg gesucht.

Wenn auf einem https-Server eine nicht vorhandene Datei angefordert wird, leiten Sie sie zum http-Server um und fordern Sie dieselbe Datei an.

z.B.

https: // example.org/some_missing_file.html - redirect -> http: // example.org/some_missing_file.html

https: // example.org/existing_file.html - Served-Datei

https: // example.org/SomeDir/missing_file - redirect -> http: // example.org/SomeDir/missing_file

https: // example.org/SomeMissingDir/ - redirect -> http: // example.org/SomeMissingDir/missing_file

Dies funktioniert, wenn das basierte Snippet funktioniert

listen 443 ssl;

#... more config

if (!-e $request_filename) {
    rewrite ^ http:// example.org$request_uri permanent;
    break;
}

Aber "wenn es böse ist" - http://wiki.nginx.org/IfIsEvil

Das ist also mein Versuch, eine try_files-Version zu erstellen - was nicht funktioniert.

   try_files $uri @redirect;

   location @redirect {
           rewrite ^ http:// example.org$request_uri permanent;
           break;
   }

Ich habe zahlreiche Variationen davon ausprobiert; proxy_redirects, 302 zurückgeben - sie können nicht umleiten oder funktionieren nicht, wenn sich eine Datei in einem Unterverzeichnis befindet, oder leiten das Stammverzeichnis nicht um, wenn es leer ist.

Hat jemand einen kugelsicheren try_files-basierten Ersatz?

(ps. Leerzeichen, weil der Link Checker nichts über example.org weiß!)

Ali W.
quelle

Antworten:

16
server {
    listen 443 ssl;

    root /path/to/documents;

    location / {
        try_files $uri @redirect; 
    }

    location @redirect {
        return 301 http://example.org$request_uri;
    }
}
VBart
quelle
Danke - ja das macht es. Wissen Sie, warum der "location / {try_files $ uri @redirect;}" dies ermöglicht? wo ohne Ort / {nicht?
Ali W
1
Um genau zu sein, funktioniert try_filesim serverKontext für diejenigen Anforderungen, die in keine fallen location. Da Sie keine vollständige Konfiguration angezeigt haben, habe ich angenommen, dass Sie Standorte haben, an denen alle Anforderungen erfasst werden können.
VBart