You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by PV...@capmon.dk on 2002/07/17 11:10:37 UTC

section: under - whats wrong here?

Hi,

In a regular Apache configuration style, this works for me:

<Directory /usr/local/httpd/htdocs/capmon/>
<Files '_*.mod'>
  PerlSetEnv PERL5LIB /opt/capmon/inc:/usr/local/httpd/htdocs/capmon/cgi
  PerlSendHeader On
    SetHandler perl-script
    PerlHandler Apache::Registry
</Files>
</Directory>

Now why doesn't this work in a <perl> </perl> section, :

$Directory = {
  '/usr/local/httpd/htdocs/capmon/' => {
    'Files' => {
      '_*.mod' => {
        'PerlHandler' => 'Apache::Registry',
        'PerlSendHeader' => 'On',
        'PerlSetEnv' => [
          'PERL5LIB',
          '/opt/capmon/inc:/usr/local/httpd/htdocs/capmon/cgi'
        ],
        'SetHandler' => 'perl-script'
      }
    }
  }
};

It gives no errors, but just doesn't treat it as CGI. As far as I can see,
it is *exactly* equivalent to the <Directory> section at the top, isn't it?

In a <perl> </perl> section, this works *does* work:

$Files = {
  '_*.mod' => {
    'PerlHandler' => 'Apache::Registry',
    'PerlSendHeader' => 'On',
    'PerlSetEnv' => [
      'PERL5LIB',
      '/opt/capmon/inc:/usr/local/httpd/htdocs/capmon/cgi'
    ],
    'SetHandler' => 'perl-script'
  }
};

But it isn't limited to the /usr/local/httpd/htdocs/capmon/ directory.

How do I restrict it to a particular directory?

I've read the
http://perl.apache.org/docs/1.0/guide/config.html#Apache_Configuration_in_Perl

section
     and
http://modperl.com:9000/book/chapters/ch8.html#Configuring_Apache_with_Perl
and especially from the last reference, I've tried to follow the "Directive
is a Nested Block " section exactly. Are there any other pointers?

I'm running on SuSE Linux 7.2:

pvm@lyta:~/capmon> rpm -qa | egrep -i 'apache|mod_perl'
apache-1.3.19-48
mod_perl-1.25-30
perl-Apache-SSI-2.16-28

It's also 28C in this room, so maybe that is the root cause!! :-)

Thanks for your attention thus far,

Peter

P.S: When you subscribe to this mailing list, or when you look for the FAQ
on Google, you are pointed towards:
http://perl.apache.org/faq/
But this is a 404...



Re: section: under - whats wrong here?

Posted by Stas Bekman <st...@stason.org>.
PVM@capmon.dk wrote:
> Hi,
> 
> In a regular Apache configuration style, this works for me:
> 
> <Directory /usr/local/httpd/htdocs/capmon/>
> <Files '_*.mod'>
>   PerlSetEnv PERL5LIB /opt/capmon/inc:/usr/local/httpd/htdocs/capmon/cgi
>   PerlSendHeader On
>     SetHandler perl-script
>     PerlHandler Apache::Registry
> </Files>
> </Directory>
> 
> Now why doesn't this work in a <perl> </perl> section, :
> 
> $Directory = {
>   '/usr/local/httpd/htdocs/capmon/' => {
>     'Files' => {
>       '_*.mod' => {
>         'PerlHandler' => 'Apache::Registry',
>         'PerlSendHeader' => 'On',
>         'PerlSetEnv' => [
>           'PERL5LIB',
>           '/opt/capmon/inc:/usr/local/httpd/htdocs/capmon/cgi'
>         ],
>         'SetHandler' => 'perl-script'
>       }
>     }
>   }
> };
> 
> It gives no errors, but just doesn't treat it as CGI. As far as I can see,
> it is *exactly* equivalent to the <Directory> section at the top, isn't it?
> 
> In a <perl> </perl> section, this works *does* work:
> 
> $Files = {
>   '_*.mod' => {
>     'PerlHandler' => 'Apache::Registry',
>     'PerlSendHeader' => 'On',
>     'PerlSetEnv' => [
>       'PERL5LIB',
>       '/opt/capmon/inc:/usr/local/httpd/htdocs/capmon/cgi'
>     ],
>     'SetHandler' => 'perl-script'
>   }
> };
> 
> But it isn't limited to the /usr/local/httpd/htdocs/capmon/ directory.
> 
> How do I restrict it to a particular directory?
> 
> I've read the
> http://perl.apache.org/docs/1.0/guide/config.html#Apache_Configuration_in_Perl
> 
> section
>      and
> http://modperl.com:9000/book/chapters/ch8.html#Configuring_Apache_with_Perl
> and especially from the last reference, I've tried to follow the "Directive
> is a Nested Block " section exactly. Are there any other pointers?

Peter, there are two problems:

1. you misread the usage explanations

It cannot be:

$Directory = { }

it must be:

%Directory = ().

Reread 
http://modperl.com:9000/book/chapters/ch8.html#Configuring_Apache_with_Perl
again for the explanation. It seems that you've snipped the part from 
the virtual host examples but didn't set the right type for Directory.

2. It seems that there is a bug in the code that handles the Files 
sections when they are nested inside another section. I'll post a 
separate report regarding this to the dev list.

here is a workaround that should solve your problem:

$Directory{'/usr/local/httpd/htdocs/capmon/'} = {
     FilesMatch =>  {
         '\.pl$' => {
             'Options'        => '+ExecCGI',
             'SetHandler'     => 'perl-script',
             'PerlSendHeader' => 'On',
             'PerlHandler'    => 'Apache::Registry'
         },
     },
};

add 'PERL5LIB' etc...

> P.S: When you subscribe to this mailing list, or when you look for the FAQ
> on Google, you are pointed towards:
> http://perl.apache.org/faq/
> But this is a 404...

This doc has been dissolved into various docs, spread across various 
dirs, so it's impossible to add a rewrite rule. Hence the 404. I'll fix 
the mailing list doc to reflect the reality. Thanks for the report. 
Hopefully Google will catch up with the changes on the site soon.

__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com