htaccess-返回404而不是403

时间:2018-06-26 18:59:58

标签: apache .htaccess http-headers http-status-code-404

我在raspbian上使用apache2运行网络服务器。

在/ var / www / html / resources /上,有一些文件(例如,用户名,密码),但我不想让任何人知道它们的存在,因此我想返回404(未找到)状态码而不是403(禁止)。

(403错误会告诉任何人他在正确的道路上...)

是的,我已经阅读了许多this之类的问题,并且该问题下方的大多数链接正是我所需要的,但对我而言不起作用。

我是否需要更改文件(httpd.conf,...)中的某些内容?

这是我所有尝试返回404而不是403的尝试。


如果我尝试:

## return 404 for each .htaccess
RedirectMatch 404 ".*\/\..*"

在/var/www/html/.htaccess中,如果访问//localhost/.htaccess,我得到的是403,而不是我期望的404。


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 :(得分:0)

您可以在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。对于非秘密目录中的秘密文件,请在.htaccess-es中使用相同的指令,但在块的中使用