htaccess - вернуть 404 вместо 403 - PullRequest
0 голосов
/ 26 июня 2018

Я запускаю веб-сервер с apache2 на raspbian.

В / var / www / html / resources / есть некоторые файлы (например, с именами пользователей, паролями), но я не хочу, чтобы кто-нибудь знал, что они существуют, поэтому я хочу вернуть код состояния 404 (не найден) вместо 403 (запрещено).

(ошибка 403 скажет кому-либо, что он на правильном пути ...)

Да, я прочитал много вопросов, таких как this , и большинство ссылок под этим вопросом именно то, что мне нужно, но у меня это не сработало.

Должен ли я что-то изменить в файле (httpd.conf, ...)?

Вот все мои попытки вернуть 404 вместо 403.


Если я попытаюсь:
## return 404 for each .htaccess
RedirectMatch 404 ".*\/\..*"

в /var/www/html/.htaccess, я получаю 403 вместо 404, как я ожидал, если бы я посетил //localhost/.htaccess.


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

Результатов внутренней ошибки сервера (500)


Если бы я попробовал это:
# Will raise a 404 error, because the file <fake_file_for_apache_404.php> doesn't exist.
# We change 403 to 404 !
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>"

Я получил 403 в сочетании с 404 (403 - файл, к которому я хотел получить доступ, был запрещен, 404 - файл, который я должен перенаправить, не найден.)


Так что я делаю не так?

1 Ответ

0 голосов
/ 27 июня 2018

Вы можете сделать это в Perl. Итак, в секретных каталогах, в .htaccess:

ErrorDocument 403 /cgi-bin/fake404.cgi

Упомянутый /cgi-bin/fake404.cgi:

#!/usr/bin/perl -w

use strict;

print 'Status: 404 Not Found
Content-Type: text/html; charset=UTF-8'."\n\n";

print '<!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 $ENV{REQUEST_URI} was not found on this server.</p>\n</body></html>\n";

Я протестировал приведенный выше код Perl: он работает как положено.

P. S. А для секретных файлов в несекретных каталогах используйте ту же директиву в .htaccess-es, но в блоке из .

...