我们已将网站移至新域名,我们的 SEO 部门希望将一些旧网址重定向到带有 404 状态代码的新网址。我不知道这是否可行,想从社区收集一些意见
我的问题:我想尝试在 Nginx 中配置从内部 URL 到外部 URL 的重定向,并将 404 作为状态代码。我尝试过和rewrite
。return
但看起来这是不可能的。
rewrite
只能返回 301 或 302 作为状态代码。return
无法对 404 进行任何重定向。- 我尝试过
rewrite last
和return 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。但这不是正确的重定向方式