301在重定向整个域/捕获所有内容之前,在Nginx中重定向特定页面

时间:2018-02-11 02:19:42

标签: redirect nginx url-redirection http-status-code-301

我在nginx中有数千页到301重定向。我可以使用

实现这一目标
return 301 https://www.newdomain.com$request_uri;

但是,我想将大约6页重定向到新域名中已更改的段塞/路径,例如

   location /old-path/ {
   rewrite ^ https://www.newdomain.com/newpath/ permanent;
   }

我已经尝试了,但是看不清楚如何首先重定向这些6,具体来说,然后让所有规则适用于其他所有规则。

目前我只使用catch all重定向旧域,然后在新域上有301s将6个帖子更改为新路径(这6个帖子共有2个重定向)。

我想实现上述目的,不仅要将这6个页面的重定向减少到1,还要因为我想将6个页面中的一个重定向到新域的新路径,但它的旧路径仍然存在作为新域上的(新)页面(因此我需要在旧域上重定向它,而不是在新域上重定向)。

1 个答案:

答案 0 :(得分:1)

rewrite module的指令按顺序执行,因此整个过程可以仅使用rewritereturn指令完成,而不必将它们包含在location块中。例如:

server {
    ...
    rewrite ^/old-path/ https://www.newdomain.com/newpath/ permanent;
    rewrite ^/...       https://www.newdomain.com/.../     permanent;
    return 301          https://www.newdomain.com$request_uri;
}

如果将rewrite语句包装在location块中,则return语句也必须包含在location块中。例如:

location / {
    return 301 https://www.newdomain.com$request_uri;
}
location /old-path/ {
    rewrite ^ https://www.newdomain.com/newpath/ permanent;
}