reescreve o mapa (prg :) nunca termina

1

usando o Apache e um mapa de reescrita do tipo prg. Meu mapa parece:

#!/usr/bin/perl
$| = 1; # Turn off buffering 
while (<STDIN>) {
    print "someothersite.com";
}

a regra de reescrita declarada no httpd.conf é:

RewriteMap app_map prg:/file/path/test.pl
RewriteRule  (\/[\w]+)(\/[^\#\s]+)?$ http://${app_map:$1}$2 [P,L]

E os arquivos de log mostram:

init rewrite engine with requested uri /a/testlink.html
applying pattern '(\/[\w]+)(\/[^\#\s]+)?$' to uri '/a/testlink.html'

Parece que o test.pl nunca está devolvendo o controle ao apache, quando o mapa é encontrado com sucesso, espero ver essa saída no arquivo de log:

map lookup OK: map=app_map key=/a -> val=someothersite.com

Por que meu mapa não retorna o controle ao apache?

    
por SooDesuNe 31.12.2010 / 20:53

2 respostas

1

Eu trabalhei com o seguinte:

#!/usr/bin/perl
#
##   disable buffered I/O which would lead
##   to deadloops for the Apache server
$| = 1;
#
##   read URLs one per line from stdin
while (<>) {
    my $line = $_;
    if ($line eq "input_from_apache\n"){
        print "my_desired_output\n";    
    }   
    else{
        print "\n";
    }
}

Na melhor das hipóteses, os caracteres de nova linha são o que eu estava perdendo. Para alguém tentando depurar um script RewriteMap eu sugiro:

  1. Verifique se você tem:

    RewriteEngine On

    RewriteLog /var/log/httpd/rewrite.log

    RewriteLogLevel 9

    no seu httpd.conf para que você possa ver o que o mod_rewrite está fazendo

  2. Escreva seu script e, em seguida, inicie-o (por exemplo, ./my_script.pl ) e digite algumas entradas para certificar-se de obter o que espera. Foi assim que percebi que precisava do \n 's

por 02.01.2011 / 17:21
0

Já tentou fazer com que seu script Perl retorne o formato correto? Espera um par chave / valor, ou seja:

someval someothersite.com

Isso pode corrigir seus problemas. Caso contrário, você pode tentar usar um arquivo txt para simular o retorno do seu script Perl, para verificar se o RewriteMap está funcionando.

    
por 02.01.2011 / 16:22