passing value from Python3 script back to RewriteMap MapType prg in Apache24

Benedikt Kroll benedikt.kroll at der-arbeitende.de
Mon Nov 12 04:39:40 EST 2018


Hi,

using a Python script as a Rewrite Map with MapType prg in Apache 2.4, I'm having trouble
passing the value back to Apache. 

The log says "map lookup OK", but the value is empty.

According to the Apache documentation (https://httpd.apache.org/docs/current/rewrite/rewritemap.html#prg), the script "should return one new-line terminated response string on STDOUT" which is then used as the rewrite target.

I have tried to do this using:
sys.stdout.write(newValue + "/n")
sys.stdout.flush()

However, Apache receives only an empty return value (with no error).

On Stackoverflow and others, I found and tried out some examples, which
in some cases where quite old, so probably written for older versions.

The following is what I extracted from the more current hints I could find.


*.conf
RewriteEngine On
RewriteMap extrw "prg:/opt/extrw.py"
RewriteRule "^(.*)" "${extrw:%{REQUEST_URI}}"


/opt/extrw.py
import sys
while True:
   newValue = "/index.html" # placeholder for testing
   sys.stdout.write(newValue + "/n")
   sys.stdout.flush()


log for curl 127.0.0.1/abc
init rewrite engine with requested uri /abc
applying pattern '^(.*)' to uri '/abc'
map lookup OK: map=extrw key=/abc -> val=
rewrite '/abc' -> ''
local path result:


The expected result would be to have "map lookup OK: map=extrw key=/abc
-> val=/index.html" in the third line.

Any help would be appreciated!

Thanks!
Benedikt



More information about the Python-list mailing list