From 60cd431e2ff1bec982e9bb8999c7a675c8d3a564 Mon Sep 17 00:00:00 2001 From: Bill Fenner Date: Sat, 7 Jul 2007 19:26:18 +0000 Subject: [PATCH] Add middleware that catches 404 errors if the original URL has a trailing period and redirects to the same URL with no trailing periods. Add a redirect test in the top-level testurl.list. - Legacy-Id: 850 --- ietf/middleware.py | 7 +++++++ ietf/settings.py | 1 + ietf/testurl.list | 1 + 3 files changed, 9 insertions(+) diff --git a/ietf/middleware.py b/ietf/middleware.py index f19a23b08..a89a1ca64 100644 --- a/ietf/middleware.py +++ b/ietf/middleware.py @@ -8,6 +8,7 @@ except ImportError: from django.db import connection from django.shortcuts import render_to_response from django.template import RequestContext +from django.http import HttpResponsePermanentRedirect from ietf.utils import log import re import smtplib @@ -61,3 +62,9 @@ class SMTPExceptionMiddleware(object): return render_to_response('email_failed.html', {'exception': type, 'args': value, 'traceback': "".join(tb)}, context_instance=RequestContext(request)) return None + +class RedirectTrailingPeriod(object): + def process_response(self, request, response): + if response.status_code == 404 and request.path.endswith("."): + return HttpResponsePermanentRedirect(request.path.rstrip(".")) + return response diff --git a/ietf/settings.py b/ietf/settings.py index 764a3f7c1..2ebf7809e 100644 --- a/ietf/settings.py +++ b/ietf/settings.py @@ -90,6 +90,7 @@ MIDDLEWARE_CLASSES = ( # 'ietf.middleware.PrettifyMiddleware', 'ietf.middleware.SQLLogMiddleware', 'ietf.middleware.SMTPExceptionMiddleware', + 'ietf.middleware.RedirectTrailingPeriod', 'django.middleware.transaction.TransactionMiddleware', ) diff --git a/ietf/testurl.list b/ietf/testurl.list index 84e6e12d6..8d6ed5b0f 100644 --- a/ietf/testurl.list +++ b/ietf/testurl.list @@ -7,3 +7,4 @@ skip /css/base.css skip /js/ 200 /googlea30ad1dacffb5e5b.html # Google webmaster tool verification page +301 /list/request.... # test middleware that strips periods and redirects instead of 404