Nginx 使用 try_files 将 https 上不存在的文件重定向到 http

Nginx 使用 try_files 将 https 上不存在的文件重定向到 http

我已经搜索了一段时间来寻找正确的方法。

在 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

此 if 代码片段有效

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 的万无一失的替代品吗?

(注:由于链接检查器不知道 example.org,所以出现空格!)

答案1

server {
    listen 443 ssl;

    root /path/to/documents;

    location / {
        try_files $uri @redirect; 
    }

    location @redirect {
        return 301 http://example.org$request_uri;
    }
}

相关内容