summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Saddi <allan@saddi.com>2011-02-19 00:16:45 -0800
committerAllan Saddi <allan@saddi.com>2011-02-19 00:16:45 -0800
commitfd558313d33bf9c04b288240879e56ff9714bb4f (patch)
tree05b1df3dfa62389f76895871395ce58e27ef036c
parentf866035b7c02527b83850cf841d5a78b106ab85e (diff)
downloadflup-fd558313d33bf9c04b288240879e56ff9714bb4f.tar.gz
When deriving PATH_INFO from REQUEST_URI, take SCRIPT_NAME into account.
-rw-r--r--ChangeLog4
-rw-r--r--flup/server/fcgi_base.py5
-rw-r--r--flup/server/scgi_base.py5
3 files changed, 12 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 5993dc2..4b444d2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2011-02-19 Allan Saddi <allan@saddi.com>
+
+ * When deriving PATH_INFO from REQUEST_URI, take SCRIPT_NAME into account.
+
2011-01-11 Allan Saddi <allan@saddi.com>
* Use HTTP status code 500 for error pages. Thanks to
diff --git a/flup/server/fcgi_base.py b/flup/server/fcgi_base.py
index f4b9753..8a9a181 100644
--- a/flup/server/fcgi_base.py
+++ b/flup/server/fcgi_base.py
@@ -1186,7 +1186,10 @@ class BaseFCGIServer(object):
if not environ.has_key('PATH_INFO') or not environ['PATH_INFO']:
if reqUri is not None:
- environ['PATH_INFO'] = reqUri[0]
+ scriptName = environ['SCRIPT_NAME']
+ if not reqUri[0].startswith(scriptName):
+ environ['wsgi.errors'].write('WARNING: SCRIPT_NAME does not match REQUEST_URI')
+ environ['PATH_INFO'] = reqUri[0][len(scriptName):]
else:
environ['PATH_INFO'] = ''
if not environ.has_key('QUERY_STRING') or not environ['QUERY_STRING']:
diff --git a/flup/server/scgi_base.py b/flup/server/scgi_base.py
index 199f82b..30a95a0 100644
--- a/flup/server/scgi_base.py
+++ b/flup/server/scgi_base.py
@@ -525,7 +525,10 @@ class BaseSCGIServer(object):
environ['SCRIPT_NAME'] = ''
if not environ.has_key('PATH_INFO') or not environ['PATH_INFO']:
if reqUri is not None:
- environ['PATH_INFO'] = reqUri[0]
+ scriptName = environ['SCRIPT_NAME']
+ if not reqUri[0].startswith(scriptName):
+ self.logger.warning('SCRIPT_NAME does not match request URI')
+ environ['PATH_INFO'] = reqUri[0][len(scriptName):]
else:
environ['PATH_INFO'] = ''
else: