
aw at ice-sa
Oct 28, 2009, 10:12 AM
Post #2 of 4
(608 views)
Permalink
|
|
Re: Handler Chain (based on request method)
[In reply to]
|
|
Aaron Dalton wrote: > I'm using mod_perl and CGI::Application::Dispatch to create a RESTful > web application. In the one resource, GETs should be sent to the > default handler, and all other requests to the dispatcher. I have tried > using <Limit> and <LimitExcept>, but they do not appear to be working. > The handlers get processed regardless. Here is the current config: > > <Location /fs> > <LimitExcept GET> > Allow from All > SetHandler perl-script > PerlHandler BackCAD::Dispatch > </LimitExcept> > <Limit GET> > Allow from All > SetHandler default-handler > </Limit> > </Location> > > Is there some way to make this work? Do I need to write some sort of > pre-dispatcher that checks the request method and returns DECLINED if > it's GET? But if it's *not* GET, how do I then pass control on to the > other dispatcher? > Just by curiosity, what happened to the suggestions I gave you on the Apache httpd list (apart from the first one, which was to cross-post here) ? Also, the reason why the above does not work is probably that the <Limit...> sections are not really full containers. So your SetHandlers above probably overwrite one another regardless, and only the last one counts. Another quick/cheap hack maybe : > <Location /fs> > Allow from All > SetHandler perl-script > PerlHandler BackCAD::Dispatch > </Location> then modify the code of BackCAD::Dispatch to return DECLINED if it's a GET. Honestly, I've never tried that, and I don't know if then Apache would process it with its default handler. But it's worth a try maybe.
|