Index: django/http/__init__.py
===================================================================
--- django/http/__init__.py	(revision 6233)
+++ django/http/__init__.py	(working copy)
@@ -26,6 +26,7 @@
     def __init__(self):
         self.GET, self.POST, self.COOKIES, self.META, self.FILES = {}, {}, {}, {}, {}
         self.path = ''
+        self.full_path = ''
         self.method = None
 
     def __repr__(self):
Index: django/core/handlers/wsgi.py
===================================================================
--- django/core/handlers/wsgi.py	(revision 6233)
+++ django/core/handlers/wsgi.py	(working copy)
@@ -75,7 +75,9 @@
 class WSGIRequest(http.HttpRequest):
     def __init__(self, environ):
         self.environ = environ
-        self.path = force_unicode(environ['PATH_INFO'])
+        self.path = force_unicode(environ.get('PATH_INFO', '/'))
+        self.full_path = (force_unicode(environ.get('SCRIPT_NAME', ''))
+                          + force_unicode(environ.get('PATH_INFO', '/')))
         self.META = environ
         self.method = environ['REQUEST_METHOD'].upper()
 
Index: django/core/handlers/modpython.py
===================================================================
--- django/core/handlers/modpython.py	(revision 6233)
+++ django/core/handlers/modpython.py	(working copy)
@@ -14,7 +14,12 @@
 class ModPythonRequest(http.HttpRequest):
     def __init__(self, req):
         self._req = req
-        self.path = force_unicode(req.uri)
+        self.full_path = force_unicode(req.uri)
+        root = req.options.get('django.root', '')
+        if root and req.uri.startswith(root):
+            self.path = force_unicode(req.uri[len(root):])
+        else:
+            self.path = self.full_path
 
     def __repr__(self):
         # Since this is called as part of error handling, we need to be very
