Некоторое время я искал правильный способ сделать это.
На https-сервере при запросе несуществующего файла перенаправьте на http-сервер и запросите тот же файл.
например.
https: // example.org/some_missing_file.html - перенаправление -> http: // example.org/some_missing_file.html
https: // example.org/existing_file.html - файл подачи
https: // example.org/SomeDir/missing_file - перенаправление -> http: // example.org/SomeDir/missing_file
https: // example.org/SomeMissingDir/ - перенаправление -> http: // example.org/SomeMissingDir/missing_file
Это если основанный фрагмент работает
listen 443 ssl;
#... more config
if (!-e $request_filename) {
rewrite ^ http:// example.org$request_uri permanent;
break;
}
Но «если зло» - http://wiki.nginx.org/IfIsEvil
Итак, это моя попытка создать версию try_files, которая не работает.
try_files $uri @redirect;
location @redirect {
rewrite ^ http:// example.org$request_uri permanent;
break;
}
Я пробовал множество вариантов этого; proxy_redirects, возвращают 302 - они не могут перенаправить или не работают, когда файл находится в подкаталоге, или не перенаправляют корень, если он пуст.
Есть ли у кого-нибудь пуленепробиваемая замена на основе try_files?
(ps. пробелы из-за того, что программа проверки ссылок не знает о example.org!)
server {
listen 443 ssl;
root /path/to/documents;
location / {
try_files $uri @redirect;
}
location @redirect {
return 301 http://example.org$request_uri;
}
}