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()
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to