0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

apache で 403 できたリクエストを404 に返す方法

Posted at

アクセスして欲しくないディレクトリやファイルは403 forbidden を返すという設定をすることはよくあると思います。ですが、403 forbidden だとディレクトリもしくはファイルがあることがばれてしまうので、404 not found を返したいと思うこともあるのではないでしょうか。

そんな方のために、以下を紹介します!

前提条件

  • apache がインストールされていること
    (バージョンは何でも大丈夫です)

事前準備

今回は403 環境を作成するために、DocumentRoot に.htaccess で拒否して、再現したいと思います。

 Docuemnt Root:
 /var/www/html 

先ずはDocument Root に移動して、.htaccess を作成します。
今回は全てのリクエストを拒否したいので、htaccess でその設定を入れてあげます。

# DocumentRoot に移動
cd /var/www/html

# htaccess 作成
touch .htaccess

記述内容:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Order deny,allow
deny from all
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

この設定だけでは、.htaccess が効かないので、httpd.conf で設定の上書きを可能にする必要があります。

# Further relax access to the default document root:
<Directory "/var/www/html">

    Options Indexes FollowSymLinks
    AllowOverride All   <= この部分を All にしてください(None はダメ)

    Require all granted
</Directory>

#syntax 確認
httpd -t
Syntax Ok 

# リスタート
systemctl restart httpd

上記のように設定します。そうするとdeny from all ですべてのIP からのリクエストが拒否されるという設定になります。拒否されているのをcurl もしくはブラウザで確認できれば、オッケです。

これで準備ができました。

403 => 404 のための設定

設定は至極単純です。403 => 404 にリダイレクトするように設定してあげればそれで解決です。httpd.conf をもう一度開けます。
以下の設定を追加してください。

この設定の意味は、403 がきたら、missing.html を返してください。missing.html に対して、アクセスが来たら、404 を返してください。という内容です。

ErrorDocument 403 /missing.html

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteRule missing.html - [R=404,L]
</IfModule>

実際にこの設定をして、apache を再起動してあげると、あら不思議、404 not found が表示されるではないか!!!

まとめ

案外簡単なので、404 に表示を変えたい方は、是非ともしてほしい設定です。virtual host でも同様の設定をすると、404 の表示が実現できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?