Hi,
stumbled onto this issue on a site running behind a cgi script instead
of mod_scgi.
Given my url path is something like "/app.cgi/component",
then doing publisher.redirect("/app.cgi/component")
will send to the location "/app.cgi/app.cgi/component".
The problem is in how the complete_url() is calculated...
I have come across the inverse of this issue, and I now make systematic
use of this utility function when I want to make sure that the url
paths (e.g. for js, css, etc...) are properly script_named:
def script_name_path (path):
''' (path:str) -> str
Returns script_name-normalized path.
'''
if path is None:
raise ValueError, 'Path cannot be None.'
script_name = get_request().get_script_name()
if not (-1 < path.find(script_name) <= 1):
# path is not yet "script_named"
if script_name:
if not path.startswith('/'):
path = '/' + path
path = script_name + path
# Isn't script_name always starting with a "/" ? Can anyone confirm?
if not path.startswith('/'):
path = '/' + path
return path
It seems to me you need to make complete_url() do some sort of opposite
test than this, i.e. the check:
if s.startswith('/'):
complete_path = get_request().get_script_name() + s
should also check if s is already script_named ?
mario