[mod_python] mod_rewrite and publisher

Clodoaldo Pinto Neto clodoaldo.pinto.neto at gmail.com
Tue Dec 30 20:45:10 EST 2008


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


More information about the Mod_python mailing list