web-dev-qa-db-ja.com

Apacheに403ではなく404を強制的に返す方法はありますか?

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

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

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

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

26
fuenfundachtzig

RedirectMatch など。

RedirectMatch 404 ".*\/\..*"

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

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

27
fuenfundachtzig

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

。htaccess

ErrorDocument 403 /error/404.php

404.php

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

404 Error
8
Tomer

同じ問題が発生した後、次の.htaccessファイルができました

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

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

6
jff