Apache に 403 ではなく 404 を強制的に返す方法はありますか?
-
18-09-2019 - |
質問
アクセスを禁止したい特定のディレクトリに対して 403 (禁止) の代わりに 404 (見つかりません) エラー コードを返すように Apache Web サーバーを設定する方法はありますか?
mod_rewrite の使用を提案するいくつかの解決策を見つけました。
RewriteEngine On
RewriteRule ^.*$ /404 [L]
403 の代わりに 404 を送信する目的はディレクトリ構造を難読化することであるため、この解決策は、別の場所にリダイレクトされ、最初にアクセスされたディレクトリが実際に存在することが明らかになるため、あまりにも明らかです。
解決
に、RedirectMatchするのように例えばます。
RedirectMatch 404 ".*\/\..*"
「404が見つかりません」というエラーを与える、トリックは、それはすべてのファイルやドットで始まるディレクトリへのアクセスを禁止します。
Apacheのマニュアルから:「リダイレクト[マッチ]ディレクティブは、新しい場所でリソースを再フェッチするようにクライアントを尋ねることによって新しいものに古いURLをマッピングします。」デフォルトでは、 には、302のリターンコードを送信しますが、それができるリダイレクト上記のように、他のステータスコードを返す。
他のヒント
次のようなものを作ることができます:
.htaccess
エラードキュメント 403 /error/404.php
404.php
<?php
$status = $_SERVER['REDIRECT_STATUS'] = 404;
header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $status);
?>
404 Error
Options -Indexes
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain.com [NC]
RewriteRule ^(.*)/$ - [R=404,NC]
第一と第三行は、フォルダの内容を一覧表示することができないことを確認し、あなたがそれを行う場合は、404エラーが表示されます。 するRewriteCond のディレクティブは、この書き換えルールが唯一のメインドメインに適用されることを保証します。私がするRewriteCondせずに、いくつかのサブドメインを持っているので、アクセスしwww.mydomain.com/subdomainも私が意図したものはなかった、404を返しました。
は、404エラーにすべての403400個のエラーを変更するの /etc/apache2/conf.d/localized-error-pages のORへのの.htaccess 強いの終わりにこれを配置するには>
# Will raise a 404 error, because the file <fake_file_for_apache_404.php> doesn't exist.
# We change 403 or 400 to 404 !
ErrorDocument 400 /fake_file_for_apache_404.php
ErrorDocument 403 /fake_file_for_apache_404.php
# We need to rewrite 404 error, else we will have "fake_file_for_apache_404.php not found"
ErrorDocument 404 "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\"><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL <script type=\"text/javascript\">document.write(document.location.pathname);</script> was not found on this server.</p></body></html>"
ErrorDocument 500 "Server in update. Please comme back later."