Nginx - 重写还是返回重定向?

Nginx - 重写还是返回重定向?

我有两个重定向选项(返回和重写),但我不确定哪一个更适合性能、SEO 等:

## Redirect from non-www to www
server {
        server_name example.com;
        # Option 1
        return 301 $scheme://$host$request_uri;

        # Option 2
        rewrite ^ http://$host$request_uri? permanent;
    }

## Default server config

server {
        ...
        listen      192.168.1.1:80 default_server;
        root        /www;
        server_name www.example.com;

选项 2 似乎可以与 curl 一起使用,但在浏览器调用时它不会重定向,并且返回代码是临时重定向,尽管重写指令设置为permanent

 curl -I example.com
 HTTP/1.1 302 Moved Temporarily
 Server: nginx
 ...
 Location: http://www.example.com/
 ...

答案1

您的选择 1:

return 301 $scheme://$host$request_uri;

正是您想要的。

不确定为什么该rewrite ^ http://$host$request_uri? permanent;行会导致 302 而不是 301。这是强制其返回 301 的正确语法。

答案2

从技术上来说,你可以同时使用这两种方法。它们都可以发挥作用。

根据NGINX 文档return如果可以的话使用。它更简单、更快速,因为 NGINX 停止处理请求(并且不必处理正则表达式)。此外,您还可以在3xx系列:

return (301 | 302 | 303 | 307) url;

如果您需要使用正则表达式验证 URL 或需要捕获原始 URL 中的元素(这些元素显然不在相应的 NGINX 变量中),则应使用rewrite。您必须知道rewrite仅返回代码 301 或 302。

rewrite regex URL [flag];

您可以阅读更多关于返回改写在 NGINX 网站上。

相关内容