#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.


Reply via email to