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

MRAB python at mrabarnett.plus.com
Mon Nov 12 17:57:14 EST 2018


On 2018-11-12 09:39, Benedikt Kroll wrote:
> 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!
> 
The examples I've found are also reading from stdin, so I'd suggest 
trying that:

import sys

while True:
     arg = sys.stdin.readline()
     newValue = "/index.html" # placeholder for testing
     sys.stdout.write(newValue + "/n")
     sys.stdout.flush()



More information about the Python-list mailing list