I thought that all requests that don't refer to index.py first get
rewritten by
RewriteRule   (.*)  /index.py [E=PATH_INFO:$1]
and then by
SetEnvIfNoCase Request_URI ^\index\.py(.*) PATH_INFO=$1
In that case, (.*) would of course always result in the empty string.
But I get the same results when I use (.+) in that line instead (!).

Btw, the Apache version is 2.2.16 and mod_setenvif is installed.

On May 3, 10:22 pm, boscop <[email protected]> wrote:
> I tried the second suggestion, but it works only with requests for
> index.py and PATH_INFO is always empty in that case. To redirect
> requests for other files to index.py I added the following lines too:
>
> RewriteCond   %{REQUEST_URI}   !/index\.py.*
> RewriteRule   (.*)  /index.py [E=PATH_INFO:$1]
>
> Now requests for other files work, but for some reason PATH_INFO is
> still always empty. Why?
>
> On May 3, 6:30 pm, Clodoaldo Neto <[email protected]>
> wrote:
>
>
>
> > 2011/5/3 boscop <[email protected]>:
>
> > > Thanks for the quick response!
>
> > > When using that line, some '?'s in the query string get replaced by
> > > '&':
>
> > > TEST 1:
> > > actual query:
> > >http://example.com/foo/bar/?a=b&c=d
>
> > > environ keys:
> > > REQUEST_URI: /foo/bar/?a=b&c=d
> > > PATH_INFO:
> > > QUERY_STRING: public_html/index.py&public_html/foo/bar/&a=b&c=d
>
> > > TEST 2:
> > > actual query (the second '?' is just to test whether it gets replaced,
> > > too):
> > >http://example.com/foo/bar/?a=b&c=d?e=f
>
> > > environ keys:
> > > REQUEST_URI: /foo/bar/?a=b&c=d?e=f
> > > PATH_INFO:
> > > QUERY_STRING: public_html/index.py&public_html/foo/bar/&a=b&c=d?e=f
>
> > > TEST 3
> > > actual query (more question marks):
> > >http://example.com/foo/bar/a=b&c=d?e=f?g=h?i=j
>
> > > environ keys:
> > > REQUEST_URI: /foo/bar/a=b&c=d?e=f?g=h?i=j
> > > PATH_INFO:
> > > QUERY_STRING: public_html/index.py&public_html/foo/bar/a=b&c=d&e=f?g=h?
> > > i=j
>
> > > Observations:
> > > PATH_INFO is always empty, REQUEST_URI always holds the correct path,
> > > QUERY_STRING replaces the '?' from the RewriteRule and the first one
> > > in the rest of the query string by '&' (but not any other '?'s).
>
> > > This would suggest just using the REQUEST_URI, but this page (http://
> > > blog.dscpl.com.au/2009/09/roadmap-for-python-wsgi-specification.html)
> > > explains why one shouldn't do that.
>
> > > So my questions are: Why does this replacement happen? Is there a way
> > > to get the correct query string in environ['QUERY_STRING'] somehow? If
> > > not, can I rely on the behavior that the first two question marks are
> > > always replaced by ampersands? (If that is the case, I could rebuild
> > > the corrent path from this information before passing environ to the
> > > real application.)
>
> > I suggested that RewriteRule line just to show what the error was (the
> > infinite recursion) and not as a solution to your empty PATH_INFO
> > original question.
>
> > Did you try my second answer's suggestion?:
>
> > SetEnvIfNoCase Request_URI ^\index\.py(.*) PATH_INFO=$1
>
> > Regards, Clodoaldo
>
> > > On May 3, 3:11 pm, Clodoaldo Neto <[email protected]>
> > > wrote:
> > >> 2011/5/3 boscop <[email protected]>:
>
> > >> > Hi,
> > >> > I'm on a free shared hosting account where I have no access to
> > >> > httpd.conf, but .htaccess. I have no shell access, but FTP and cPanel.
> > >> > Python is available via mod_python and mod_wsgi. I want to use one of
> > >> > the WSGI frameworks for my site. They all require that there is
> > >> > exactly one WSGI application (usually specified with
> > >> > 'WSGIScriptAlias / /path/to/app.wsgi' but this would only work in
> > >> > httpd.conf) which gets the requested path passed in
> > >> > environ['PATH_INFO']. Currently I have 'AddHandler wsgi-script .py'
> > >> > set in .htaccess, but this would cause apache to resolve the path and
> > >> > look for a wsgi script at that location, instead of passing the path
> > >> > to the main application. All frameworks that I checked out are based
> > >> > on there being only one application though (!). So I tried to use
> > >> > mod_rewrite to achieve the passing of the path to the main application
> > >> > like this:
>
> > >> > RewriteEngine On
> > >> > RewriteRule ^(.*)$ /absolute/path/to/index.py$1 [QSA,L,PT]
>
> > >> > However, this causes an internal server error (500) on any request,
>
> > >> The error is an infinite recursion. This will avoid the recursion
> > >> although it still misses the path_info:
>
> > >> RewriteRule ^(.*)$ /absolute/path/to/index.py?$1 [QSA,L,PT]
>
> > >> Regards, Clodoaldo
>
> > >> > and it says "More information about this error may be available in the
> > >> > server error log. Additionally, a 500 Internal Server Error error was
> > >> > encountered while trying to use an ErrorDocument to handle the
> > >> > request.". But no error was logged! (I confirmed that error logging
> > >> > usually works by removing that line and introducing other bugs. Also,
> > >> > having multiple wsgi apps and requesting them individually works,
> > >> > too).
> > >> > This leads me to my question: What would I have to write in .htaccess
> > >> > to cause apache to pass the requested path to the one WSGI application
> > >> > so that it correctly appears in environ['PATH_INFO'] and so that it
> > >> > also handles GET parameters correctly, (and why does the above line
> > >> > prevent error logging)?
>
> > >> > --
> > >> > You received this message because you are subscribed to the Google 
> > >> > Groups "modwsgi" group.
> > >> > To post to this group, send email to [email protected].
> > >> > To unsubscribe from this group, send email to 
> > >> > [email protected].
> > >> > For more options, visit this group 
> > >> > athttp://groups.google.com/group/modwsgi?hl=en.
>
> > > --
> > > You received this message because you are subscribed to the Google Groups 
> > > "modwsgi" group.
> > > To post to this group, send email to [email protected].
> > > To unsubscribe from this group, send email to 
> > > [email protected].
> > > For more options, visit this group 
> > > athttp://groups.google.com/group/modwsgi?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"modwsgi" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/modwsgi?hl=en.

Reply via email to