![nginx:如何使用自定义状态代码重写请求?(200 而不是 301)](https://linux22.com/image/784013/nginx%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E7%8A%B6%E6%80%81%E4%BB%A3%E7%A0%81%E9%87%8D%E5%86%99%E8%AF%B7%E6%B1%82%EF%BC%9F%EF%BC%88200%20%E8%80%8C%E4%B8%8D%E6%98%AF%20301%EF%BC%89.png)
出于 SEO 目的,我被要求配置重定向。使用 30x 状态代码进行重定向没有问题,并且有效:
location ^/home$ {
return 301 /foo/bar/index.html;
};
但似乎 301 重定向不足以抓取页面。所以我尝试了以下方法:
location ^/home$ {
return 200 /foo/bar/index.html;
}
但这只会导致字符串“/foo/bar/index.html”作为响应。是否有可能重定向具有 200 状态代码的请求?
答案1
对于这个答案,可能没有配置 nginx 的解决方案。Http 就是不能那样工作。在我们的例子中,我们在应用程序内部映射了 uri,并避免使用 nginx 重写 uri
答案2
location ^/home$ {
rewrite ^/home$ /foo/bar/index.html last;
return 200;
}
“rewrite”指令用于将请求的 URL 从“/home”更改为“/foo/bar/index.html”。“last”参数告诉 nginx 停止处理当前位置指令集并继续处理重写的 URL。然后,“return”指令用于将状态代码设置为 200。