app/django/contrib/redirects/middleware.py
changeset 54 03e267d67478
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/django/contrib/redirects/middleware.py	Fri Jul 18 18:22:23 2008 +0000
@@ -0,0 +1,27 @@
+from django.contrib.redirects.models import Redirect
+from django import http
+from django.conf import settings
+
+class RedirectFallbackMiddleware(object):
+    def process_response(self, request, response):
+        if response.status_code != 404:
+            return response # No need to check for a redirect for non-404 responses.
+        path = request.get_full_path()
+        try:
+            r = Redirect.objects.get(site__id__exact=settings.SITE_ID, old_path=path)
+        except Redirect.DoesNotExist:
+            r = None
+        if r is None and settings.APPEND_SLASH:
+            # Try removing the trailing slash.
+            try:
+                r = Redirect.objects.get(site__id__exact=settings.SITE_ID,
+                    old_path=path[:path.rfind('/')]+path[path.rfind('/')+1:])
+            except Redirect.DoesNotExist:
+                pass
+        if r is not None:
+            if r.new_path == '':
+                return http.HttpResponseGone()
+            return http.HttpResponsePermanentRedirect(r.new_path)
+
+        # No redirect was found. Return the response.
+        return response