我怎样才能在 Nginx 中执行以 404 为状态代码的重定向

我怎样才能在 Nginx 中执行以 404 为状态代码的重定向

我们已将网站移至新域名,我们的 SEO 部门希望将一些旧网址重定向到带有 404 状态代码的新网址。我不知道这是否可行,想从社区收集一些意见

我的问题:我想尝试在 Nginx 中配置从内部 URL 到外部 URL 的重定向,并将 404 作为状态代码。我尝试过和rewritereturn但看起来这是不可能的。

  • rewrite只能返回 301 或 302 作为状态代码。
  • return无法对 404 进行任何重定向。
  • 我尝试过rewrite lastreturn 404。但是没有用,因为我想重定向到外部 URL。

有人知道吗?

答案1

不能。404 不是重定向状态代码,而是错误状态代码,因此收到该代码的 Web 浏览器会将其视为错误,而不是重定向。如果您想表示该页面不再存在,并让浏览器到其他地方查找,那么 301 代码就是为此而生的。

答案2

您无法控制外部页面的 HTTP 状态代码。

然而,如果你想要实现的是显示外部页面内容在您的网站上呈现 404 状态,这是完全有可能的。您可以使用proxy_pass

但如果远程位置发出 ,情况就会变得更加棘手200。需要两个位置:

location = /foo {
    error_page 404 = @ext_404;
    return 404;
}

location @ext_404 {
    proxy_pass https://bar.example.com;
    rewrite .* /lorem-ipsum break;

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host bar.example.com;
    proxy_set_header X-NginX-Proxy true;
    proxy_redirect off;
    proxy_connect_timeout 1;
    proxy_intercept_errors off;
    expires 30;
}

因此,当有人访问 时https://your.example.com/foo,他们实际上会看到 的内容https://bar.example.com/lorem-ipsum以及 404 状态代码。

答案3

404 只能在内部发生,不能在外部 URL 上发生。您只能直接访问,不能使用 404。404 表示不存在。

如果两个服务器或 URL 都属于您,您可以重定向到带有 404 php 标头的 php 页面,并刷新 html meta 以重定向到新 URL。但这不是正确的重定向方式

相关内容