--- trac/web/main.py Mon Jul 21 01:44:40 2008 -0700 +++ trac/web/main.py Sat Jul 26 00:50:24 2008 -0700 @@ -345,6 +345,18 @@ # environment path_info = environ.get('PATH_INFO', '').lstrip('/').split('/') env_name = path_info.pop(0) + + if len(path_info) and path_info[0] == 'p': + path_info.pop(0) # pop off the p + env_parent_dir = os.path.join(env_parent_dir, env_name, 'projects') + environ['trac.env_parent_dir'] = env_parent_dir + parent_env = env_name + if len(path_info): + env_name = path_info.pop(0) + else: + env_name = None + else: + parent_env = None if not env_name: # No specific environment requested, so render an environment @@ -356,7 +368,10 @@ # To make the matching patterns of request handlers work, we append # the environment name to the `SCRIPT_NAME` variable, and keep only # the remaining path in the `PATH_INFO` variable. - environ['SCRIPT_NAME'] = Href(environ['SCRIPT_NAME'])(env_name) + if parent_env: + environ['SCRIPT_NAME'] = Href(environ['SCRIPT_NAME'])(parent_env, 'p', env_name) + else: + environ['SCRIPT_NAME'] = Href(environ['SCRIPT_NAME'])(env_name) environ['PATH_INFO'] = '/' + '/'.join(path_info) if env_parent_dir: