Net: .htaccess で特定ディレクトリのアクセスを拒否する方法

通常、http サーバが Apache かつ .htaccess が使用できる場合で、特定ディレクトリのアクセスを拒否したい場合は、そのディレクトリの .htaccess ファイルに deny from all とでも記述すればよいが、ある URL のドキュメントルートの下に、別 URL のドキュメントルートがあるような場合で、どちらかの URL からのアクセスのみ許可したい等の場合は使えない。

下記のように、

  • http://www.example.com/
    ドキュメントルート : /hoge/
  • http://www.example.net/
    ドキュメントルート : /hoge/contents.net/

と、www.example.com のドキュメントルートの下に www.example.net のドキュメントルートが存在するように定義されている場合、http://www.example.com/contents.net/ 以下の URL にアクセスすると、当然ながら www.example.net で表示されるコンテンツの表示できる。

これを

  • http://www.example.com/contents.net/ → アクセスを拒否
  • http://www.example.net/ → アクセスを許可

としたい場合の .htaccess 記述方法の例。

下記の内容の .htaccess ファイルを http://www.example.net/ のドキュメントルート、/hoge/contents.net/ 直下に設置する。

SetEnvIf Request_URI “^/contents\.net/.*” DenyReq
order allow,deny
deny from env=DenyReq
allow from all

※上記設定が有効となるには、AllowOverride で FileInfo と Limit が許可になっている必要がある。
※当然、http://www.example.net/contents.net/ という URL もアクセスできなくなる。