Nginx:301返回的简单try_文件';t重定向

Nginx:301返回的简单try_文件';t重定向,nginx,redirect,Nginx,Redirect,当本地找不到资源时,我想让Nginx重定向到外部URL。这是我的配置: server { listen 80; server_name localhost; root /usr/share/nginx/html; location / { try_files $uri @redirect; if ($request_method = 'GET') { add_header 'Access-C

当本地找不到资源时,我想让Nginx重定向到外部URL。这是我的配置:

server {
    listen       80;
    server_name  localhost;

    root   /usr/share/nginx/html;

    location / {
       try_files $uri @redirect;
       if ($request_method = 'GET') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
        }
    }

    location @redirect {
        return 301 https://myfallbacksite.net$request_uri;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
当我尝试访问一个不存在的资源时,我只得到一个404,请求不会重定向到回退网站

我认为它以前工作过,所以可能有一个愚蠢的打字错误。Nginx错误日志显示:

2018/10/28 10:22:35 [error] 9#9: *11 open() "/usr/share/nginx/html/picture.png" failed (2: No such file or directory), client: 172.19.0.1, server: localhost, request: "GET /picture.png HTTP/1.1", host: "myvhost", referrer: "https://www.originwebsite.com"

。。。这是真的(资源不存在),但我希望请求被重定向,而不是发回404。

正如@ben5556和@Richard Smith所暗示的那样,
if
语句就是原因所在。Nginx文档实际上建议尽可能不使用它。当我删除了
if
环绕
add_header
指令的包装时,一切又恢复了正常。

Hi,检查/usr/share/nginx/html的权限是否更改?如果没有,请尝试清除浏览器缓存并重试again@ben5556谢谢你的建议。因为即使在尝试从机器内部获取资源时(执行
curl),我也会得到404http://localhost/picture.png
)这不可能是浏览器缓存问题。另外,如果是权限问题,我想我会得到一个“权限被拒绝”错误,而不是错误日志中的“没有这样的文件或目录”。我想这可能是一个典型的情况。是的,在进行快速测试时删除
if
块会得到预期的结果。将
if
块放回将导致404。@ben5556和@Richard Smith非常感谢!事实上,如果我离开
add_标题
行,但没有
if
包装,它就可以工作了!如果你们中有人想在上面写一个答案,我会接受的:-)