diff --git a/playbooks/roles/mailman-site/templates/mailman_multihost.vhost.j2 b/playbooks/roles/mailman-site/templates/mailman_multihost.vhost.j2
index b834c276b7..71d9f40496 100644
--- a/playbooks/roles/mailman-site/templates/mailman_multihost.vhost.j2
+++ b/playbooks/roles/mailman-site/templates/mailman_multihost.vhost.j2
@@ -14,6 +14,8 @@
RewriteEngine on
# TODO(fungi): convert this vhost into a blanket redirect to HTTPS when ready
RewriteRule ^/$ /cgi-bin/mailman/listinfo [R]
+RewriteCond %{HTTP_HOST} ^lists\.openstack\.org$ [nocase]
+RewriteRule /(cgi-bin/mailman/listinfo|pipermail)/(staff)(/.*|$) %{REQUEST_SCHEME}://lists.openinfra.dev/$1/$2$3 [last,redirect=permanent]
# We can find mailman here:
ScriptAlias /cgi-bin/mailman/ /usr/lib/cgi-bin/mailman/
@@ -81,6 +83,8 @@ Alias /images/mailman/ /usr/share/images/mailman/
RewriteEngine on
RewriteRule ^/$ /cgi-bin/mailman/listinfo [R]
+ RewriteCond %{HTTP_HOST} ^lists\.openstack\.org$ [nocase]
+ RewriteRule /(cgi-bin/mailman/listinfo|pipermail)/(staff)(/.*|$) %{REQUEST_SCHEME}://lists.openinfra.dev/$1/$2$3 [last,redirect=permanent]
ScriptAlias /cgi-bin/mailman/ /usr/lib/cgi-bin/mailman/
Alias /pipermail/ /srv/mailman/{{ mailman_site.name }}/archives/public/
diff --git a/testinfra/test_lists_o_o.py b/testinfra/test_lists_o_o.py
index 24ea24d0c9..df2f6ebe4a 100644
--- a/testinfra/test_lists_o_o.py
+++ b/testinfra/test_lists_o_o.py
@@ -81,6 +81,45 @@ def test_mm_list_site(host):
'https://lists.zuul-ci.org/cgi-bin/mailman/listinfo')
assert '
lists.zuul-ci.org Mailing Lists' in cmd.stdout
+def test_mm_list_site_redirect_listinfo_http(host):
+ cmd = host.run('curl '
+ '--resolve lists.openstack.org:80:127.0.0.1 '
+ 'http://lists.openstack.org/cgi-bin/mailman/listinfo/staff')
+ assert ('The document has moved here') in cmd.stdout
+ cmd = host.run('curl --location '
+ '--resolve lists.openinfra.dev:80:127.0.0.1 '
+ '--resolve lists.openstack.org:80:127.0.0.1 '
+ 'http://lists.openstack.org/cgi-bin/mailman/listinfo/staff')
+ assert 'Staff Info Page' in cmd.stdout
+
+def test_mm_list_site_redirect_archives_http(host):
+ cmd = host.run('curl '
+ '--resolve lists.openstack.org:80:127.0.0.1 '
+ 'http://lists.openstack.org/pipermail/staff/')
+ assert ('The document has moved here') in cmd.stdout
+ cmd = host.run('curl --location '
+ '--resolve lists.openinfra.dev:80:127.0.0.1 '
+ '--resolve lists.openstack.org:80:127.0.0.1 '
+ 'http://lists.openstack.org/pipermail/staff/')
+ assert 'The Staff Archives
' in cmd.stdout
+
+def test_mm_list_site_redirect_archives_https(host):
+ cmd = host.run('curl --insecure '
+ '--resolve lists.openstack.org:443:127.0.0.1 '
+ 'https://lists.openstack.org/pipermail/staff/')
+ assert ('The document has moved here') in cmd.stdout
+ cmd = host.run('curl --insecure --location '
+ '--resolve lists.openinfra.dev:443:127.0.0.1 '
+ '--resolve lists.openstack.org:443:127.0.0.1 '
+ 'https://lists.openstack.org/pipermail/staff/')
+ assert 'The Staff Archives
' in cmd.stdout
+
def test_domain_aliases(host):
domain_aliases = host.file('/etc/aliases.domain')
assert domain_aliases.exists