IMPOV::In My Point Of View

仕事、SEO、ウェブマーケティング、時事問題、健康、生き方などなど、書きたいことを勝手に書き倒しているブログです。とどのつまり「便所の落書き」

サブディレクトリで特定のファイル以外のBasic認証を解除する

サイト全体に(ルートディレクトリで)Basic認証(もしくはDigest認証)を設定し、そのサブディレクトリの特定のファイル以外の認証を解除したい場合の .htaccess の設定。

mt.cgi以外のファイルの認証を解除する
<FilesMatch "^(?!(mt\.cgi|\.ht))">
    Satisfy Any
    order allow,deny
    allow from all
</FilesMatch>

MovableTypeをマルチドメイン(バーチャルホスト)環境で使用している場合、MTを設置しているドメイン全体にベーシック認証を設定してしまうと、別のバーチャルドメインから mt-search.cgi や static ディレクトリにアクセスできなかったり、システム情報で mt-check.cgi が401を返して動かなかったりと色々不便。

f:id:impov:20140412163723p:plain:w270,right
というわけで、mtディレクトリの認証を解除したいのだが、かといって mt.cgi へのアクセスは制限したままにしたい。

そこで正規表現の「否定先読み」を使用してみた。

^(?!(mt\.cgi)) とすることで、「mt.cgiで始まらないファイル」ということになるはず。

ただ、シンプルに mt.cgi のみを指定すると、.htaccess への制限も同時に解除されてしまうので、| を入れて、.ht で始まるファイルについての制限解除も回避。

他にもアクセスされたくないものがあれば、| でつないで列記すればよい。

否定先読みとか、| は、処理が重そうなので、アクセスが多いディレクトリでは使わないほうが良さそうですね。

逆に、mt-search.cgi だけに外部アクセスを許すのであれば、

<Files mt-search.cgi>
    Satisfy Any
    order allow,deny
    allow from all
</Files>

で良さそうですね。