apache+webdavの設定例

apacheのmod_webdavでの設定例を探すと、apacheの公式マニュアルにこんな例があります。

DavLockDB /usr/local/apache2/var/DavLock

<Directory /usr/local/apache2/htdocs/foo>
    Require all granted
    Dav On

    AuthType Basic
    AuthName DAV
    AuthUserFile user.passwd

    <LimitExcept GET POST OPTIONS>
        Require user admin
    </LimitExcept>
</Directory>

ところがですよ。この例の通りに設定すると、認証を通らなくてもなんでもできちゃう。つまり上の方にあるRequre all grantedが /usr/local/apache2/htdocs/foo 以下に対して有効になって、下の方にあるLimitExceptが効かない。PUTもDELETEも認証なしでできる。

以下の設定例で期待通りの動作、WebDAV関連のメソッドに対しては認証を求め、それ以外GET,OPTIONSは認証なしで利用できる、が実現できます。公式マニュアルが間違っているとは思えないので、何らかの理由でRequireのスコープが変わっているのかもしれません。

DavLockDB /usr/local/apache2/var/DavLock

<Directory /usr/local/apache2/htdocs/foo>
    Require valid-user
    Dav On

    AuthType Basic
    AuthName DAV
    AuthUserFile user.passwd

    <Limit GET OPTIONS>
        Require all granted
    </Limit>
</Directory>

6月16日追記

そうか、Orderだな。Orderが違うそうなるかも。