From fd558313d33bf9c04b288240879e56ff9714bb4f Mon Sep 17 00:00:00 2001 From: Allan Saddi Date: Sat, 19 Feb 2011 00:16:45 -0800 Subject: When deriving PATH_INFO from REQUEST_URI, take SCRIPT_NAME into account. --- ChangeLog | 4 ++++ flup/server/fcgi_base.py | 5 ++++- flup/server/scgi_base.py | 5 ++++- 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 + + * When deriving PATH_INFO from REQUEST_URI, take SCRIPT_NAME into account. + 2011-01-11 Allan Saddi * 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: -- cgit v1.2.1