[mod_python] mod_rewrite and publisher

Clodoaldo Pinto Neto clodoaldo.pinto.neto at gmail.com
Wed Dec 31 05:54:35 EST 2008


2008/12/31 Graham Dumpleton <graham.dumpleton at gmail.com>:
> Log values of:
>
>  req.filename
>  req.uri
>  req.path_info
>  req.args
>
> In the handler and post so can see better what you are saying is
> getting passed to it.

When _publisher.py is this:

from mod_python import publisher, apache
from os.path import basename

def handler(req):
   req.add_output_filter('DEFLATE')
   req.write("""
      req.filename: %s
      req.uri: %s
      req.path_info: %s
      req.args: %s
      """ % (req.filename, req.uri, req.path_info, req.args)
   )
   if basename(req.filename) == 'index.py':
      req.uri = '/'
   req.write('basename: "%s" req.uri: "%s"' % (basename(req.filename), req.uri))
   return apache.OK
   return publisher.handler(req)

calling it like this:
http://example.com/carro/Fiat/DF/Sao_Paulo/2

I get this:

      req.filename: /var/www/html/example.com/index.py
      req.uri: /carro/Fiat/DF/Sao_Paulo/2
      req.path_info:
      req.args:
marca=Fiat&modelo=&uf=DF&localidade=Sao_Paulo&bairro=&tv=carro&pagina=2
      basename: "index.py" req.uri: "/"

I will write it to the log later. I'm leaving now.

Regards, Clodoaldo
>
> Unless you are saying publisher isn't getting the request at all.
>
> Graham
>
> 2008/12/31 Clodoaldo Pinto Neto <clodoaldo.pinto.neto at gmail.com>:
>> I'm working on an old mod_python-publisher site. I'm changing the
>> current query string parameters to dynamic urls using mod_rewrite
>> inside a virtual host.
>>
>>    <Directory /var/www/html/example.com>
>>       SetHandler mod_python
>>       PythonHandler /home/example/mod/_publisher.py
>>       PythonOption mod_python.importer.path "['/home/example/mod']"
>>       PythonFixupHandler /home/example/mod/_upload_limit.py
>>    </Directory>
>>
>>    RewriteLog /var/log/httpd/example.com-rewrite.log
>>    RewriteLogLevel 9
>>    RewriteEngine on
>>    RewriteRule ^/pub/.* - [L]
>>    RewriteRule ^/$ /index.py [L]
>>    RewriteRule ^/(.*?)/?$ /$1/
>>    RewriteRule ^(/(a|b|c))?([/\w]+?)(/(\d+))?/$ $3/?tv=$2&pagina=$5 [NC]
>>    RewriteRule ^([/\w]*?)(/(x|y|z))?(/(\w+?))?(/(\w+?))?/$ \
>> $1/?uf=$3&localidade=$5&bairro=$7 [QSA,NC]
>>    RewriteRule ^(/(\w+))?(/(\w+))?/$ /?marca=$2&modelo=$4 [QSA]
>>    RewriteRule ^/$ /index.py [QSA,L]
>>
>>
>> The rewrite is working as expected. The problem i have is the
>> publisher doing its own rewrite (is it?) after the one above using the
>> original uri not the rewrote one.
>>
>> rewrite log:
>>
>> 10.1.1.101 - - [30/Dec/2008:23:28:45 --0200]
>> [example.dkt/sid#b94e66e0][rid#bedec338/initial] (3) split
>> uri=/?marca=&modelo= -> uri=/,
>> args=marca=&modelo=&uf=DF&localidade=Sao_Paulo&bairro=&tv=a&pagina=2
>> 10.1.1.101 - - [30/Dec/2008:23:28:45 --0200]
>> [example.dkt/sid#b94e66e0][rid#bedec338/initial] (3) applying pattern
>> '^/$' to uri '/'
>> 10.1.1.101 - - [30/Dec/2008:23:28:45 --0200]
>> [example.dkt/sid#b94e66e0][rid#bedec338/initial] (2) rewrite '/' ->
>> '/index.py'
>> 10.1.1.101 - - [30/Dec/2008:23:28:45 --0200]
>> [example.dkt/sid#b94e66e0][rid#bedec338/initial] (2) local path
>> result: /index.py
>> 10.1.1.101 - - [30/Dec/2008:23:28:45 --0200]
>> [example.dkt/sid#b94e66e0][rid#bedec338/initial] (2) prefixed with
>> document_root to /var/www/html/example.com/index.py
>> 10.1.1.101 - - [30/Dec/2008:23:28:45 --0200]
>> [example.dkt/sid#b94e66e0][rid#bedec338/initial] (1) go-ahead with
>> /var/www/html/example.com/index.py [OK]
>>
>> Then the publisher gets from there with the original uri:
>>
>> 10.1.1.101 - - [30/Dec/2008:23:28:45 --0200]
>> [example.dkt/sid#b94e66e0][rid#beac0170/initial] (2) init rewrite
>> engine with requested uri /a/DF/Sao_Paulo/
>>
>> How to make the publisher use the rewrote uri? Or what am i missing
>> and should be doing?
>>
>> _publisher.py:
>>
>> from mod_python import publisher
>> from os.path import basename
>>
>> def handler(req):
>>   req.add_output_filter('DEFLATE')
>>   if basename(req.filename) == 'index.py':
>>      req.uri = '/'
>>   return publisher.handler(req)
>>
>> Regards, Clodoaldo
>> _______________________________________________
>> Mod_python mailing list
>> Mod_python at modpython.org
>> http://mailman.modpython.org/mailman/listinfo/mod_python
>>
>


More information about the Mod_python mailing list