#12464: Empty PATH_INFO causes blank SCRIPT_NAME ---------------------------+------------------------------------------------ Reporter: chrisw | Owner: nobody Status: new | Milestone: Component: Uncategorized | Version: 1.1 Keywords: | Stage: Unreviewed Has_patch: 0 | ---------------------------+------------------------------------------------ Take the following Apache config snippet:
RewriteEngine On WSGIScriptAlias /project /django/project/bin/django.wsgi This results in mod_rewrite setting the SCRIPT_URL environment variable. The code at http://code.djangoproject.com/browser/django/tags/releases/1.1.1/django/core/handlers/base.py#L204: script_url = environ.get('SCRIPT_URL', u'') if not script_url: script_url = environ.get('REDIRECT_URL', u'') if script_url: return force_unicode(script_url[:-len(environ.get('PATH_INFO', ''))]) return force_unicode(environ.get('SCRIPT_NAME', u'')) ...behaves incorrectly when, in the above example, /project is requested from Apache. The problem is when PATH_INFO is empty, as it is in this case. Python has no notion of positive or negative zero (;-)) so we end up returning script_url[:0]. This results in request.META['SCRIPT_NAME'] being set to '', which in turn results in urls being generated incorrectly. A workaround for this is to add the following rewrite rule before WSGIScriptAlias: RewriteRule ^/project$ /project/ [R] This bug is potentially related to #9435, but this is ticket describes a real world problem that I believe has bitten more people than just me... A solution for this could well just be to change the section to: if script_url: path_info = environ.get('PATH_INFO', '') if path_info: script_url = script_url[:-len(path_info)] return force_unicode(script_url) return force_unicode(environ.get('SCRIPT_NAME', u'')) ...but I have no idea where to go about writing a test. -- Ticket URL: <http://code.djangoproject.com/ticket/12464> Django <http://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-upda...@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.