From: Magnus Hagander Date: Tue, 4 Nov 2014 13:57:07 +0000 (+0100) Subject: Redirect archives URLs including <> in the messageid X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=9b7e9b5927d4fac45f683ced690015a20ae9382d;p=pgarchives.git Redirect archives URLs including <> in the messageid < and > are not part of the actual message id, but some user agents will include it when copying it (for example Thunderbird). Catch when this happens and redirect the browser back to the proper URL instead of giving a 404. --- diff --git a/django/archives/mailarchives/views.py b/django/archives/mailarchives/views.py index f6c401a..e011827 100644 --- a/django/archives/mailarchives/views.py +++ b/django/archives/mailarchives/views.py @@ -556,3 +556,11 @@ def base_css(request): @cache(hours=8) def slash_redirect(request, url): return HttpResponsePermanentRedirect("/%s" % url) + + +# Redirect the requested URL to whatever happens to be in the regexp capture. +# This is used for user agents that generate broken URLs that are easily +# captured using regexp. +@cache(hours=8) +def re_redirect(request, prefix, msgid): + return HttpResponsePermanentRedirect("/%s%s" % (prefix, msgid)) diff --git a/django/archives/urls.py b/django/archives/urls.py index d524999..16fc718 100644 --- a/django/archives/urls.py +++ b/django/archives/urls.py @@ -19,9 +19,16 @@ urlpatterns = patterns('', (r'^$', 'archives.mailarchives.views.index'), (r'^list/$', 'archives.mailarchives.views.index'), (r'^list/group/(\d+)/$', 'archives.mailarchives.views.groupindex'), + + # some user agents generate broken URLs that include <> + (r'^(?Pmessage-id/(|flat/|raw/))<(?P.*)>$', 'archives.mailarchives.views.re_redirect'), + + # Match regular messages (r'^message-id/([^/]+)$', 'archives.mailarchives.views.message'), (r'^message-id/flat/([^/]+)$', 'archives.mailarchives.views.message_flat'), (r'^message-id/raw/([^/]+)$', 'archives.mailarchives.views.message_raw'), + + # Search (r'^archives-search/', 'archives.mailarchives.views.search'), # message-id with a slash needs to be redirected to one without it