【发布时间】:2012-05-17 14:23:58
【问题描述】:
这里已经发布了几个关于在特殊情况下返回 404 而不是 403 的问题(例如,.ht* 文件或某个目录),但我不知道如何简单地替换 all 403 响应(“好吧,它存在,但你仍然需要找到方法进入”)和 404(“抱歉,从未听说过”)。我希望有一个简单的解决方案,不需要更新 .htaccess 的正则表达式或其他位以匹配站点更改,只需一个简单的指令:“每当您决定返回 403 时,就返回 404”适用到整个站点,无论配置更改如何。
然后,如果顶级 .htaccess 包含“Options -Indexes”,并且任何给定目录不包含 index.html(或等效),那么裸目录 URL 将返回 404,但如果我添加了 index.html该目录,相同的裸目录 URL 将返回 index.html,无需更新任何 .htaccess 文件。
我什至不在乎,如果我曾经为目录设置密码,错误的密码是否返回 404(因为 404 -> 403 映射)。在这种情况下,我不会通过返回 404 来隐藏任何内容,但这也不会造成任何伤害。但是,如果有一种方法可以撤消针对特殊情况的一般 403->404 映射(而不是针对特殊情况执行此操作),那可能会更有用。
当然,如果我忽略了某些东西,请纠正我。
编辑:德拉特。我试图在这里写一个高质量的问题,但我在第二段中对“Options -Indexes”行为的描述结果是错误的。没有该行,如果目录中存在裸目录 URL,则会显示“index.html”;否则,它会显示目录的内容。 (如果 index.html 存在,则 /dir 到 /dir/index.html 的转发是 Web 主机的默认设置,除非我弄错了。)添加“Options -Indexes”行会阻止它在公共场合晾晒我的衣服(返回 403,而不是 404,但仍然比暴露 dir 内容更好),但现在即使 index.html 存在,裸目录 URL 也会返回 403。
我希望裸目录 URL“mysite.com/mydir”如果存在则显示 /mydir/index.html,如果不存在则显示“404”,但显然它不仅仅是用 404 替换 403。
【问题讨论】:
-
您可以发布您当前的配置(
.htaccess和 Apache 配置文件)吗? -
实际上,我还没有任何 .htaccess,也没有自己的 Apache 配置文件 (httpd.conf?)。这是一个新的共享 Web 主机,我正试图弄清楚如何进行设置。我假设我的 .htaccess 将包含“Options -Indexes”行,但我什至不确定。
-
我遇到了同样的问题并使用了重写条件和重写规则。 See my answer to a similar question.
标签: security http .htaccess http-status-code-403