Есть ли способ заставить apache возвращать 404 вместо 403?
Есть ли способ настроить веб-сервер Apache для возврата кода ошибки 404 (не найденного) вместо 403 (запрещено) для некоторых конкретных каталогов, к которым я хочу запретить доступ?
Я нашел несколько решений, предлагающих использование mod_rewrite, например,
RewriteEngine On
RewriteRule ^.*$ /404 [L]
Поскольку целью отправки 404 вместо 403 является обфускация структуры каталогов, это решение слишком показательно, поскольку оно перенаправляется в другое место, что делает очевидным, что каталог, изначально доступный на самом деле, фактически существует.
Ответы
Ответ 1
RedirectMatch, как, например,
RedirectMatch 404 ".*\/\..*"
делает трюк, он запрещает доступ ко всем файлам или каталогам, начиная с точки, предоставляя ошибку "404 Not Found".
Из руководства Apache: "Директива Redirect [Match] отображает старый URL-адрес в новый, предлагая клиенту восстановить ресурс в новом месте". По умолчанию Redirect отправляет код возврата 302, но он также может возвращать другие коды состояния, как показано выше.
Ответ 2
Вы можете сделать что-то вроде этого:
.htaccess
ErrorDocument 403/error/404.php
404.php
<?php
$status = $_SERVER['REDIRECT_STATUS'] = 404;
header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $status);
?>
404 Error
Ответ 3
После такой же проблемы у меня появился следующий файл .htaccess
Options -Indexes
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain.com [NC]
RewriteRule ^(.*)/$ - [R=404,NC]
1-я и 3-я строки гарантируют, что вы не можете перечислить содержимое папки, и если вы это сделаете, вы получите ошибку 404.
Директива RewriteCond гарантирует, что это правило перезаписи применяется только к основному домену. Поскольку у меня есть несколько поддоменов, без перезаписи, доступ к www.mydomain.com/subdomain также возвращал 404, что не было тем, что я намеревался.
Ответ 4
Мы получаем код состояния 403 против 404, пожалуйста, помогите, когда мы используем IP, затем получаем правильный ответ, и когда мы нажимаем на URL, то получаем неправильный код состояния
Ответ 5
Чтобы изменить все 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."