Назад | Перейти на главную страницу

Nginx перенаправляет несуществующие файлы с https на http с помощью try_files

Некоторое время я искал правильный способ сделать это.

На 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;
    }
}