diff --git a/roles/flyspray/files/migrated-tasks.map b/roles/flyspray/files/migrated-tasks.map
new file mode 100644
index 0000000000000000000000000000000000000000..6ea28549028dcb4cf9eb2d5089b36764198bbb15
--- /dev/null
+++ b/roles/flyspray/files/migrated-tasks.map
@@ -0,0 +1,96 @@
+# archlinux-keyring
+/task/56061 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/17;
+/task/68501 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/18;
+/task/37122 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/19;
+/task/37123 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/20;
+/task/37124 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/21;
+/task/37125 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/22;
+/task/37126 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/23;
+/task/37127 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/24;
+/task/37128 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/25;
+/task/37129 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/26;
+/task/38209 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/27;
+/task/41524 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/28;
+/task/41536 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/29;
+/task/52337 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/30;
+/task/52338 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/31;
+/task/52766 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/32;
+/task/55623 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/33;
+/task/55624 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/34;
+/task/55977 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/35;
+/task/55978 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/36;
+/task/55979 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/37;
+/task/56016 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/38;
+/task/57132 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/39;
+/task/57133 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/40;
+/task/58504 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/41;
+/task/58822 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/42;
+/task/58823 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/43;
+/task/59639 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/44;
+/task/60305 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/45;
+/task/60306 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/46;
+/task/60321 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/47;
+/task/64099 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/48;
+/task/64100 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/49;
+/task/64151 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/50;
+/task/64708 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/51;
+/task/65081 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/52;
+/task/67803 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/53;
+/task/67848 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/54;
+/task/68700 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/55;
+/task/69078 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/56;
+/task/37121 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/57;
+/task/37433 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/58;
+/task/38253 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/59;
+/task/38941 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/60;
+/task/41540 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/61;
+/task/41584 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/62;
+/task/42728 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/63;
+/task/43443 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/64;
+/task/43451 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/65;
+/task/44591 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/66;
+/task/44688 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/67;
+/task/46710 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/68;
+/task/47111 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/69;
+/task/50257 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/70;
+/task/50818 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/71;
+/task/51814 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/72;
+/task/52491 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/73;
+/task/52649 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/74;
+/task/53132 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/75;
+/task/54158 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/76;
+/task/55074 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/77;
+/task/55506 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/78;
+/task/55660 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/79;
+/task/55726 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/80;
+/task/56212 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/81;
+/task/56513 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/82;
+/task/56864 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/83;
+/task/57452 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/84;
+/task/57679 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/85;
+/task/57845 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/86;
+/task/59467 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/87;
+/task/59544 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/88;
+/task/59626 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/89;
+/task/59899 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/90;
+/task/60716 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/91;
+/task/60753 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/92;
+/task/60850 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/93;
+/task/60872 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/94;
+/task/60990 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/95;
+/task/61152 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/96;
+/task/62326 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/97;
+/task/63926 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/98;
+/task/63983 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/99;
+/task/64131 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/100;
+/task/66612 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/101;
+/task/66634 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/102;
+/task/66873 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/103;
+/task/67255 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/104;
+/task/67956 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/105;
+/task/68638 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/106;
+/task/68958 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/107;
+/task/69192 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/108;
+/task/48082 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/109;
+/task/59872 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/110;
+/task/63453 https://gitlab.archlinux.org/archlinux/archlinux-keyring/issues/111;
diff --git a/roles/flyspray/tasks/main.yml b/roles/flyspray/tasks/main.yml
index a41b59401b0599b2f743ce1cef55ed0ed852c1ec..de42365f7666b241705211c460e367980245abe2 100644
--- a/roles/flyspray/tasks/main.yml
+++ b/roles/flyspray/tasks/main.yml
@@ -32,6 +32,9 @@
   when: maintenance is not defined
   tags: ['nginx']
 
+- name: install nginx migrated-tasks.map
+  copy: src=migrated-tasks.map dest=/etc/nginx/maps/ owner=root group=root mode=0644
+
 - name: make nginx log dir
   file: path=/var/log/nginx/{{ flyspray_domain }} state=directory owner=root group=root mode=0755
 
diff --git a/roles/flyspray/templates/nginx.d.conf.j2 b/roles/flyspray/templates/nginx.d.conf.j2
index c3a0e5e4f3ec2061f9ef2e5ead7196be247d4dfe..a658ddcfd11e4d845f2b2a50f51f97c181a94357 100644
--- a/roles/flyspray/templates/nginx.d.conf.j2
+++ b/roles/flyspray/templates/nginx.d.conf.j2
@@ -19,6 +19,11 @@ server {
     }
 }
 
+map $uri $redirect {
+    default "";
+    include maps/migrated-tasks.map;
+}
+
 server {
     listen       443 ssl http2;
     listen       [::]:443 ssl http2;
@@ -51,6 +56,9 @@ server {
     }
 
     location ~ ^/task/(?<task_id>[0-9]+) {
+        if ($redirect != "") {
+            return 302 $redirect;
+        }
         rewrite ^/task/[0-9]+$ /index.php?do=details&task_id=$task_id last;
         rewrite ^/task/[0-9]+/comment(?<comment_id>[0-9]+)$ /index.php?do=details&task_id=$task_id&comment=$comment_id last;
         rewrite ^/task/[0-9]+/depends$ /index.php?do=depends&task_id=$task_id last;
diff --git a/roles/nginx/tasks/main.yml b/roles/nginx/tasks/main.yml
index 44302870162eb96fa70d8da877669d6925579b98..7e36c2ef1051afa9610ff1355245fa7ea0ea2f7c 100644
--- a/roles/nginx/tasks/main.yml
+++ b/roles/nginx/tasks/main.yml
@@ -34,6 +34,9 @@
 - name: create auth directory
   file: state=directory path=/etc/nginx/auth owner=root group=root mode=0755
 
+- name: create maps directory
+  file: state=directory path=/etc/nginx/maps owner=root group=root mode=0755
+
 - name: create default nginx log directory
   file: state=directory path=/var/log/nginx/default owner=root group=root mode=0755