29

有没有一种方法可以配置 Apache Web 服务器以返回 404(未找到)错误代码而不是 403(禁止)对于我想要禁止访问的某些特定目录?

我发现了一些建议使用 mod_rewrite 的解决方案,例如

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

由于发送 404 而不是 403 的目的是为了混淆目录结构,所以这种解决方案太暴露了,因为它重定向到某个不同的位置,这使得最初访问的目录显然确实存在。

4

5 回答 5

28

RedirectMatch例如

RedirectMatch 404 /\.

成功了,它禁止访问以点开头的所有文件或目录,从而给出“404 Not Found”错误。

来自 Apache 手册:“Redirect[Match] 指令通过要求客户端在新位置重新获取资源来将旧 URL 映射到新 URL。” 默认情况下,Redirect会发送 302 返回码,但也可以返回其他状态码,如上图所示。

于 2009-09-28T15:41:57.863 回答
12

你可以做这样的事情:

.htaccess

错误文档 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 回答