Nginx 301 从旧站点重定向到新站点

Nginx 301 redirect from oldsite to newsite

以下网址及其 header 状态代码。请注意重定向正在发生。但在某些情况下,我在 header 中看到 301,而在某些情况下,我看不到。

https://www.oldsite.com -> 301 found in header
https://oldsite.com -> 301 found in header
http://www.oldsite.com -> No 301 found in header
http://oldsite.com -> No 301 found in header

https://www.newsite.com - Target site
https://newsite.com -> 302 found in header
http://www.newsite.com -> No 301 found in header
http://newsite.com -> No 301 found in header

我有以下四种配置。这些配置有什么问题吗?请注意,这是一个 magento 网站。

oldsite.com.nginx.conf

server {
    listen      ipaddress:80;
    server_name oldsite.com www.oldsite.com;
    root        /home/oldsite/web/oldsite.com/public_html;
    index       index.php index.html index.htm;

location / {
 return 301 https://www.newsite.com$request_uri; 
}
    include     /home/oldsite/conf/web/nginx.oldsite.com.conf*;
}

oldsite.com.nginx.ssl.conf

server {
    listen      ipaddress:443;
    server_name oldsite.com www.oldsite.com;
    root        /home/oldsite/web/oldsite.com/public_html;
    index       index.php index.html index.htm;

    ssl         on;
    ssl_certificate      /home/oldsite/conf/web/ssl.oldsite.com.pem;
    ssl_certificate_key  /home/oldsite/conf/web/ssl.oldsite.com.key;

location / {
 return 301 https://www.newsite.com$request_uri; 
}

newsite.com.nginx.conf

server {
    listen      ipaddress:80;
return 301 https://www.newsite.com$request_uri; 
    server_name newsite.com www.newsite.com;

    root        /home/newsite/web/newsite.com/public_html/pub;
    index       index.php;
    autoindex   off;
    charset     UTF-8;
    error_page  404 403 = /errors/404.php;
    add_header  "X-UA-Compatible" "IE=Edge";

}

newsite.com.nginx.ssl.conf

server {
    listen      ipaddress:443 http2;
    server_name newsite.com www.newsite.com;

    root        /home/newsite/web/newsite.com/public_html/pub;
    index       index.php;
    autoindex   off;
    charset     UTF-8;
    error_page  404 403 = /errors/404.php;
    add_header  "X-UA-Compatible" "IE=Edge";

    ssl         on;
    ssl_certificate      /home/newsite/conf/web/ssl.newsite.com.pem;
    ssl_certificate_key  /home/newsite/conf/web/ssl.newsite.com.key;

}

要以不同方式处理 example.comwww.example.com,您应该将现有的 server 块拆分为两个,并将所需的 return 语句放入其中一个。

例如:

server {
    listen      443 ssl http2;
    server_name example.com;

    ssl_certificate      /home/newsite/conf/web/ssl.newsite.com.pem;
    ssl_certificate_key  /home/newsite/conf/web/ssl.newsite.com.key;

    return 301 https://www.newsite.com$request_uri;
}

server {
    listen      443 ssl http2;
    server_name www.example.com;

    ssl_certificate      /home/newsite/conf/web/ssl.newsite.com.pem;
    ssl_certificate_key  /home/newsite/conf/web/ssl.newsite.com.key;

    root        /home/newsite/web/newsite.com/public_html/pub;
    index       index.php;
    autoindex   off;
    charset     UTF-8;
    error_page  404 403 = /errors/404.php;
    add_header  "X-UA-Compatible" "IE=Edge";

    ...
    ...
    ...
}