Locked

apache_tips_001

ステータス 403 Forbidden 応答を 404 Not Found 応答にする/mod_asis設定

apacheでコンテンツ(ファイル/ディレクトリ等)に対してアクセス制限を掛けた場合、標準では応答ステータス 403 Forbidden となります。
アクセス制限により、コンテンツへのアクセス/閲覧は防止出来ますが、ファイルが存在することを知らせることになります。
そこでapacheの標準機能であるmod_asisを使用して、403 Forbidden 応答を 404 Not Found 応答と同一のものにします。

  • 参考URL

http://httpd.apache.org/docs/2.2/ja/mod/mod_asis.html

mod_asis(場合によってはmod_rewrite等と組み合わせて)は応用範囲も広く、何かと便利です。

バージョン情報

ここでは、以下のバージョンについて記載しています。

  • CensOS5

$ cat /etc/redhat-release
CentOS release 5.11 (Final)

$ httpd -v
Server version: Apache/2.2.3
Server built:   Sep 16 2014 11:29:05
  • CentOS6

$ cat /etc/redhat-release
CentOS release 6.7 (Final)

$ httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Dec 15 2015 15:50:14

mod_asis設定

404 Not Found 応答に使用するドキュメントを作成します。
既に、該当のエラードキュメントがある場合は、それを流用してください。

例として、ドキュメントルート下に「404.asis」というファイルを作成します。

--- /dev/null
+++ /var/www/html/404.asis
@@ -0,0 +1,11 @@
+Status: 404 Not Found
+Content-type: text/html
+
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<html><head>
+<title>404 Not Found</title>
+</head><body>
+<h1>Not Found</h1>
+<p></p>
+<hr>
+</body></html>

apacheの設定を行います。

--- /dev/null
+++ /etc/httpd/conf.d/asis.conf
@@ -0,0 +1,4 @@
+LoadModule asis_module modules/mod_asis.so
+AddHandler send-as-is asis
+ErrorDocument 403 /404.asis
+ErrorDocument 404 /404.asis

apacheにモジュールを適用します。

# service httpd configtest && service httpd reload

動作確認

設定前の応答。

$ HEAD http://www.example.jp/.htaccess
403 Forbidden
...

設定後の応答。

$ HEAD http://www.example.jp/.htaccess
404 Not Found
...

$ GET http://www.example.jp/.htaccess
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p></p>
<hr>
</body></html>