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.

Reply via email to