我已经搜索了一段时间来寻找正确的方法。
在 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;
}
}