Unbreak 301 responses
authorSebastian Spaeth <Sebastian@SSpaeth.de>
Tue, 15 Jan 2013 15:52:22 +0000 (16:52 +0100)
committerSebastian Spaeth <Sebastian@SSpaeth.de>
Tue, 15 Jan 2013 15:52:22 +0000 (16:52 +0100)
The move to werkzeug routing went pretty smooth, but one thing was
broken by accident: URLs without final slash result in a 301
werkzeug.routing.RequestRedirect response. We displayed it as a generic
error page rather than actually sending the redirect. Do that. One thing
it does though is to skip all meddlewares, which should be OK for a 301
response, but might need rework if we decide otherwise. With this, 301
responses with lacking final slash are unbroken again.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
mediagoblin/app.py

index c16366932a22353e3a52689ce856353ffa063988..10fbf4a3e055bccfc6fce6a32f5dc636a646aee4 100644 (file)
@@ -22,6 +22,7 @@ from mediagoblin.tools.routing import endpoint_to_controller
 
 from werkzeug.wrappers import Request
 from werkzeug.exceptions import HTTPException, NotFound
+from werkzeug.routing import RequestRedirect
 
 from mediagoblin import meddleware, __version__
 from mediagoblin.tools import common, translate, template
@@ -186,6 +187,9 @@ class MediaGoblinApp(object):
         try:
             found_rule, url_values = map_adapter.match(return_rule=True)
             request.matchdict = url_values
+        except RequestRedirect as response:
+            # Deal with 301 responses eg due to missing final slash
+            return response(environ, start_response)
         except HTTPException as exc:
             # Stop and render exception
             return render_http_exception(