You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Trevor Phillips <ph...@central.murdoch.edu.au> on 2000/02/21 07:29:06 UTC
Problems with DocumentRoot behaviour...
I'm writing an Access Module (PerlAccessHandler), and within the Access Handler
I'm trying to do similar to an Internal Redirect, using Custom Response. ie;
$r->custom_response(FORBIDDEN,"/the/other/URI");
return FORBIDDEN;
The effect I'm after is, depending on certain conditions, a different page will
be shown (without a change in the URL). Part of the problem is this happens
during the Access phase, and I cannot override the normal Handler phase (due to
this being used with CGI's, etc...).
Things all work as they should, except where the URI is for a directory, and
thus using DocumentRoot to derive the filename. It DOES derive the correct
filename, but redirecting using custom_response does NOT seem to work at all
when accessing a URI directory. Instead of the target URI being shown, you get
the standard FORBIDDEN handler. ie; It's ignoring the custom_response
handler...
What's going on here, and how can I fix it? ^_^
Are there any alternative ways to redirect internally at the Access phase?
Thanks in advance...
--
. Trevor Phillips - http://jurai.murdoch.edu.au/ .
: Web Systems Administrator - T.Phillips@murdoch.edu.au :
| IT Services - Murdoch University |
>------------------- Member of the #SAS# & #CFC# --------------------<
| On nights such as this, evil deeds are done. And good deeds, of /
| course. But mostly evil, on the whole. /
\ -- (Terry Pratchett, Wyrd Sisters) /
Re: Problems with DocumentRoot behaviour...
Posted by "G.W. Haywood" <ge...@jubileegroup.co.uk>.
Hi again,
On Wed, 23 Feb 2000, Trevor Phillips wrote:
> "G.W. Haywood" wrote:
> >
> > On Mon, 21 Feb 2000, Trevor Phillips wrote:
> >
> > > The effect I'm after is, depending on certain conditions, a
> > > different page will be shown (without a change in the URL). Part of
> > > the problem is this happens during the Access phase, and I cannot
> > > override the normal Handler phase (due to this being used with
> > > CGI's, etc...).
> >
> > The Eagle Book, page 466, says of $r->set_handlers():
> >
> > "If you would like to change the list of Perl handlers configured for
> > the current request, you can change it with set_handlers()."
>
> I have tried this, and it does not work. This is how I was initially doing it:
>
> $r->handler("perl-script");
> $r->set_handlers(PerlHandler=>[\&MyHandler]);
Of handler(), the Eagle Book p.444 says: "handler() cannot be used to
set handlers for anything but the response phase", you said
> > > the problem is this happens during the Access phase
What are the conditions when you want to invoke your handler?
Can I have a look at it?
Can you see a way to use a handler which handles everything, but which
returns DECLINED for cases where you *don't* want your special page?
There are examples of that kind in the book.
> Eh? I am passing what's expected!
Don't be upset - but I really don't think so. The book definitely
says "the URI of the document or module". A directory is neither.
> Any other ideas?
Ooooh, lots. If you like we can do something using the C API, then we
could get *really* unruly:)
73,
Ged.
Re: Problems with DocumentRoot behaviour...
Posted by Trevor Phillips <ph...@central.murdoch.edu.au>.
"G.W. Haywood" wrote:
>
> On Mon, 21 Feb 2000, Trevor Phillips wrote:
>
> > The effect I'm after is, depending on certain conditions, a
> > different page will be shown (without a change in the URL). Part of
> > the problem is this happens during the Access phase, and I cannot
> > override the normal Handler phase (due to this being used with
> > CGI's, etc...).
>
> The Eagle Book, page 466, says of $r->set_handlers():
>
> "If you would like to change the list of Perl handlers configured for
> the current request, you can change it with set_handlers()."
I have tried this, and it does not work. This is how I was initially doing it:
$r->handler("perl-script");
$r->set_handlers(PerlHandler=>[\&MyHandler]);
However, this doesn't seem to work unless the Handler is already set to
perl-script. I couldn't get it working on plain HTML files, or CGI's...
(Otherwise I definitely would use this as it is the neater solution).
> > Things all work as they should, except where the URI is for a
> > directory, and thus using DocumentRoot to derive the filename. It
> > DOES derive the correct filename, but redirecting using
> > custom_response does NOT seem to work at all when accessing a URI
> > directory. Instead of the target URI being shown, you get the
> > standard FORBIDDEN handler. ie; It's ignoring the custom_response
> > handler...
>
> The Eagle Book, page 169, says of the $r->custom_response() method:
>
> "This method takes two arguments: the status code of the response you
> want to handle and the URI of the document or module that you want to
> pass control to."
>
> I'm not a bit surprised that if you don't pass what's expected you
> don't get what's expected. Could you try passing a module name and
> do some processing in there to achieve the desired effect?
Eh? I am passing what's expected! I have said Eagle Book sitting next to me,
and have tried the techniques listed, and it still has problems! As I said,
custom_response works FINE where the initial URI is a file within a folder
(/something/afile.html), but does not when it points to a directory, kicking in
with the DocumentRoot path evaluation (/something/ => /something/index.html).
I'm not talking about the URI redirected to by custom_response - that is
Static.
> Hope this helps,
No, not really. I've tried the first technique, and it didn't work. The second
technique I am doing as documented in the Eagle Book, and it doesn't work
either (when the initial URL is a Directory URI).
Any other ideas?
--
. Trevor Phillips - http://jurai.murdoch.edu.au/ .
: Web Systems Administrator - T.Phillips@murdoch.edu.au :
| IT Services - Murdoch University |
>------------------- Member of the #SAS# & #CFC# --------------------<
| On nights such as this, evil deeds are done. And good deeds, of /
| course. But mostly evil, on the whole. /
\ -- (Terry Pratchett, Wyrd Sisters) /
Re: Problems with DocumentRoot behaviour...
Posted by "G.W. Haywood" <ge...@jubileegroup.co.uk>.
Hi there,
On Mon, 21 Feb 2000, Trevor Phillips wrote:
> The effect I'm after is, depending on certain conditions, a
> different page will be shown (without a change in the URL). Part of
> the problem is this happens during the Access phase, and I cannot
> override the normal Handler phase (due to this being used with
> CGI's, etc...).
The Eagle Book, page 466, says of $r->set_handlers():
"If you would like to change the list of Perl handlers configured for
the current request, you can change it with set_handlers()."
> Things all work as they should, except where the URI is for a
> directory, and thus using DocumentRoot to derive the filename. It
> DOES derive the correct filename, but redirecting using
> custom_response does NOT seem to work at all when accessing a URI
> directory. Instead of the target URI being shown, you get the
> standard FORBIDDEN handler. ie; It's ignoring the custom_response
> handler...
The Eagle Book, page 169, says of the $r->custom_response() method:
"This method takes two arguments: the status code of the response you
want to handle and the URI of the document or module that you want to
pass control to."
I'm not a bit surprised that if you don't pass what's expected you
don't get what's expected. Could you try passing a module name and
do some processing in there to achieve the desired effect?
Hope this helps,
73,
Ged.