サブディレクトリで特定のファイル以外の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を返して動かなかったりと色々不便。
というわけで、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>
で良さそうですね。