Redirect nginx:如何从给定列表中批量永久重定向?

Redirect nginx:如何从给定列表中批量永久重定向?,redirect,nginx,Redirect,Nginx,我有大约400个url,将在新版本中更改,由于某些原因,我无法在新网站中重复相同类型的url结构 我的问题是,我能给nginx提供一个url列表(是的,我知道400个),然后简单地告诉他他们每个人都要去另一个url吗 就像我说的,url结构会有所不同,所以我不能使用任何类型的模式 提前感谢。最简单的方法可能是在列表中加上指令。本例中的配置如下所示: map $request_uri $new_uri { default ""; /old/page1.html /new/page1

我有大约400个url,将在新版本中更改,由于某些原因,我无法在新网站中重复相同类型的url结构

我的问题是,我能给nginx提供一个url列表(是的,我知道400个),然后简单地告诉他他们每个人都要去另一个url吗

就像我说的,url结构会有所不同,所以我不能使用任何类型的模式


提前感谢。

最简单的方法可能是在列表中加上指令。本例中的配置如下所示:

map $request_uri $new_uri {
    default "";
    /old/page1.html /new/page1.html;
    /old/page2.html /new/page2.html;
    ...
}

server {
    ...

    if ($new_uri != "") {
        rewrite ^(.*)$ $new_uri permanent;
    }

    ...
}

如果您有一个很长的条目列表,最好将它们保留在nginx配置文件之外:

map_hash_bucket_size 256; # see http://nginx.org/en/docs/hash.html

map $request_uri $new_uri {
    include /etc/nginx/oldnew.map; #or any file readable by nginx
}

server {
    listen       80;
    server_name  your_server_name;

    if ($new_uri) {
       return 301 $new_uri;
    }

    ...    
}
/etc/nginx/oldnew.map示例:

/my-old-url /my-new-url;
/old.html /new.html;
确保每行末尾都有一个“;”字符

此外,如果需要将所有URL重定向到另一台主机,可以使用:

return 301 http://example.org$new_uri;
或者,如果您还需要重定向到另一个端口:

return 301 http://example.org:8080$new_uri;

地图应该包含“;”在每一行的末尾,它都会导致EOL错误感谢@paimpozhil缺少详细信息请参阅解释我很抱歉@Tummaldhanvi,但您的编辑是错误的:请仔细检查链接文章,因为它与我的答案完全相同。我意识到编辑后,没有取消编辑的功能,所以我一直在等待编辑被批准或拒绝。我应该在这里更新我的错误编辑。为我的错误道歉。非常感谢。对于您的答案:)是否需要
默认值
行?文档中说“如果未指定默认值,则默认结果值将为空字符串。”。