You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Martin Haase-Thomas <mh...@meome-ag.de> on 2002/02/06 16:21:27 UTC

QUESTION

Hi all,

I hope there'll be someone here to help we with a mod_perl prob, of
which I thought first it wouldn't be one. I refer to the "Writing Apache
Modules" book by Stein/MacEachern.

The prob is quite simple: I have to redirect certain requests under
certain conditions to another URL (and please believe me: I tried with
mod_rewrite, this way seems to be more efficient). I'm using Apache
1.3.22 on Debian Linux 2.4.17.

These are the lines from my httpd.conf:

    PerlFreshRestart On
    PerlTaintCheck On
    PerlSetEnv SHORTNAMES /etc/apache/shortnames.txt
    PerlAddVar PROJECT_DOCUMENT_ROOT /home/disp05/app/fn/
    PerlRequire /usr/local/sbin/appstart

    <Location />
       SetHandler perl-script
       PerlHandler Apache::StaticServer
    </Location>

The stanza in StaticServer.pm that fails is:

 if ($redirect = $shortnames->get($fname, WAIT, 1)) {
       if ($redirect !~ /$r->server()->server_hostname/) {
          $r->content_type('text/html');
          $r->header_out ( Location => $redirect ); $log->debug($redirect);
          return REDIRECT;
       }
 ...
 }

$shortnames is an Apache::SharedMem segment, containing a vast amount of
shortnames as keys and the corresponding URLs as values. The funny thing
is now, that although I do everything exactly as I find it in the book
on p.125 (content_type, header_out, REDIRECT), I get pure nonsense.

This is what a libwww-perl client displays when I try to access the 
address:
500 (Internal Server Error) unexpected EOF before status line seen
Client-Date: Wed, 06 Feb 2002 13:40:25 GMT

This is what I find in access_log:
192.168.255.75 - - [06/Feb/2002:14:46:24 +0100] "GET /psycho HTTP/1.0"
200 - "-" "libwww-perl/5.50"

And this is what stands in error_log:
[Wed Feb  6 14:46:24 2002] [debug]
/usr/local/share/perl/5.6.1/Apache/StaticServer.pm(45): [client
192.168.255.75] http://www.domain.de/app/fn/portal_welcome_jsp/52329.html

The error log proves that the second if() matches, as the entry comes
from my $log->debug(...).

Has anyone got an idea? I'm close to depression -;)

Many thanx in advance
Martin


Re: QUESTION

Posted by Tim Tompkins <ti...@arttoday.com>.
if ($redirect = $shortnames->get($fname, WAIT, 1)) {
       if ($redirect !~ /$r->server()->server_hostname/) {
          $r->content_type('text/html');
          $r->header_out ( Location => $redirect ); $log->debug($redirect);

$r->send_http_header;

          return REDIRECT;
 }


Regards,

Tim Tompkins
----------------------------------------------
Programmer
http://www.arttoday.com/
http://www.rebelartist.com/
----------------------------------------------
----- Original Message -----
From: Martin Haase-Thomas
To: modperl@apache.org
Sent: Wednesday, February 06, 2002 8:21 AM
Subject: QUESTION


Hi all,

I hope there'll be someone here to help we with a mod_perl prob, of
which I thought first it wouldn't be one. I refer to the "Writing Apache
Modules" book by Stein/MacEachern.

The prob is quite simple: I have to redirect certain requests under
certain conditions to another URL (and please believe me: I tried with
mod_rewrite, this way seems to be more efficient). I'm using Apache
1.3.22 on Debian Linux 2.4.17.

These are the lines from my httpd.conf:

    PerlFreshRestart On
    PerlTaintCheck On
    PerlSetEnv SHORTNAMES /etc/apache/shortnames.txt
    PerlAddVar PROJECT_DOCUMENT_ROOT /home/disp05/app/fn/
    PerlRequire /usr/local/sbin/appstart

    <Location />
       SetHandler perl-script
       PerlHandler Apache::StaticServer
    </Location>

The stanza in StaticServer.pm that fails is:

 if ($redirect = $shortnames->get($fname, WAIT, 1)) {
       if ($redirect !~ /$r->server()->server_hostname/) {
          $r->content_type('text/html');
          $r->header_out ( Location => $redirect ); $log->debug($redirect);
          return REDIRECT;
       }
 ...
 }

$shortnames is an Apache::SharedMem segment, containing a vast amount of
shortnames as keys and the corresponding URLs as values. The funny thing
is now, that although I do everything exactly as I find it in the book
on p.125 (content_type, header_out, REDIRECT), I get pure nonsense.

This is what a libwww-perl client displays when I try to access the address:
500 (Internal Server Error) unexpected EOF before status line seen
Client-Date: Wed, 06 Feb 2002 13:40:25 GMT

This is what I find in access_log:
192.168.255.75 - - [06/Feb/2002:14:46:24 +0100] "GET /psycho HTTP/1.0"
200 - "-" "libwww-perl/5.50"

And this is what stands in error_log:
[Wed Feb  6 14:46:24 2002] [debug]
/usr/local/share/perl/5.6.1/Apache/StaticServer.pm(45): [client
192.168.255.75] http://www.domain.de/app/fn/portal_welcome_jsp/52329.html

The error log proves that the second if() matches, as the entry comes
from my $log->debug(...).

Has anyone got an idea? I'm close to depression -;)

Many thanx in advance
Martin