diff --git a/django/core/handlers/modpython.py b/django/core/handlers/modpython.py index d407476acf..58699816fd 100644 --- a/django/core/handlers/modpython.py +++ b/django/core/handlers/modpython.py @@ -31,6 +31,11 @@ class ModPythonRequest(http.HttpRequest): self.path_info = force_unicode(req.uri[len(root):]) else: self.path_info = self.path + if not self.path_info: + # Django prefers empty paths to be '/', rather than '', to give us + # a common start character for URL patterns. So this is a little + # naughty, but also pretty harmless. + self.path_info = u'/' def __repr__(self): # Since this is called as part of error handling, we need to be very diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py index ca8dd4565f..a1324936cd 100644 --- a/django/core/handlers/wsgi.py +++ b/django/core/handlers/wsgi.py @@ -76,7 +76,13 @@ def safe_copyfileobj(fsrc, fdst, length=16*1024, size=0): class WSGIRequest(http.HttpRequest): def __init__(self, environ): script_name = base.get_script_name(environ) - path_info = force_unicode(environ.get('PATH_INFO', '/')) + path_info = force_unicode(environ.get('PATH_INFO', u'/')) + if not path_info: + # Sometimes PATH_INFO exists, but is empty (e.g. accessing + # the SCRIPT_NAME URL without a trailing slash). We really need to + # operate as if they'd requested '/'. Not amazingly nice to force + # the path like this, but should be harmless. + path_info = u'/' self.environ = environ self.path_info = path_info self.path = '%s%s' % (script_name, path_info)