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ß!)
try_files
imserver
Kontext für diejenigen Anforderungen, die in keine fallenlocation
. Da Sie keine vollständige Konfiguration angezeigt haben, habe ich angenommen, dass Sie Standorte haben, an denen alle Anforderungen erfasst werden können.