29

アクセスを禁止したい特定のディレクトリに対して、403(禁止)ではなく404(見つからない)エラーコードを返すようにApache Webサーバーを構成する方法はありますか?

たとえば、mod_rewriteの使用を提案するいくつかの解決策を見つけました。

RewriteEngine On
RewriteRule ^.*$ /404 [L]

403の代わりに404を送信する目的はディレクトリ構造をわかりにくくすることであるため、このソリューションは、最初にアクセスしたディレクトリが実際に存在することを明らかにする別の場所にリダイレクトされるため、あまりにも明白です。

4

5 に答える 5

28

たとえばのようにRedirectMatch

RedirectMatch 404 /\.

トリックを実行すると、ドットで始まるすべてのファイルまたはディレクトリへのアクセスが禁止され、「404NotFound」エラーが発生します。

Apacheマニュアルから:「Redirect [Match]ディレクティブは、クライアントに新しい場所でリソースを再フェッチするように要求することにより、古いURLを新しいURLにマップします。」デフォルトでは、リダイレクトは302リターンコードを送信しますが、上記のように他のステータスコードを返すこともできます。

于 2009-09-28T15:41:57.863 に答える
12

あなたはこのようなものを作ることができます:

.htaccess

ErrorDocument 403 /error/404.php

404.php

<?php
$status = $_SERVER['REDIRECT_STATUS'] = 404;
header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $status);
?>

404 Error
于 2013-08-07T17:04:53.083 に答える
6

同じ問題が発生した後、私は次の.htaccessファイルになりました

Options -Indexes
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain.com [NC]
RewriteRule ^(.*)/$ - [R=404,NC]

1行目と3行目では、フォルダの内容を一覧表示できないようになっています。一覧表示すると、404エラーが発生します。RewriteCondディレクティブは、この書き換えルールがメインドメインにのみ適用されることを保証します。私はいくつかのサブドメインを持っているので、rewritecondなしで、www.mydomain.com / subdomainにアクセスすると404も返されましたが、これは私が意図したものではありませんでした。

于 2014-01-12T12:49:14.200 に答える
1

私の意見では、このタスクを実行すること.htaccessは非常に醜い解決策です。

apache構成にすることが可能です。見てください:

apache構成に追加します。

ErrorDocument 403 /404

次に、apacheを再起動します。

service apache2 restart

以上です。

于 2020-04-03T08:03:49.357 に答える
-3

すべての403,400エラーを404エラーに変更するには、これを/etc/apache2/conf.d/localized-error-pagesの最後または.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."
于 2013-12-17T19:13:42.947 に答える