如何配置 Apache 以始终返回错误

如何配置 Apache 以始终返回错误

我想故意抛出一个任意错误。在<LocationMatch>...</LocationMatch>指令之间添加一些适当的内容。例如:

<LocationMatch "^/myurl/.+">
    ThrowError 503
</LocationMatch>

<LocationMatch "^/anotherurl/.+">
    ThrowError 504
</LocationMatch>

<LocationMatch "^/safeurl/">
    # not throwing an error from this path
    Options +Indexes
</LocationMatch>

我可以用什么来代替ThrowError 503?我想强制服务器告诉用户我选择的任何错误代码(例如 404、403、501 等)作为测试我的规则的方法。最坏的情况是,error_log如果我不能真正向浏览器抛出错误,我希望将一条消息写入。

我知道我可能会用mod_rewrite它来执行,RewriteRule .* - [R=503,L]但是我只想使用核心模块(我没有mod_rewrite编译到我的 Apache 中)。

更新:我发现我可以说RedirectMatch 410 .这将向用户报告“消失”消息作为一种潜在的解决方案。

答案1

正如您自己提到的,作为 mod_alias 一部分的Redirect指令(我认为不是必需的RedirectMatch?)应该可以解决问题。

来自文档:

可以通过将数字状态代码作为 status 的值来返回其他状态代码。如果状态介于 300 和 399 之间,则必须存在 URL 参数,否则必须省略。请注意,Apache 代码必须知道该状态(请参阅 http_protocol.c 中的函数 send_error_response)。

例子:Redirect 303 /three http://example.com/other

编辑:

我不太了解 C 代码,但从快速浏览 http_protocol.c 来看,这些是您的选择:

100 继续
101 切换协议
102 处理

200 确定
201 已创建
202 已接受
203 非权威信息
204 无内容
205 重置内容
206 部分内容
207 多状态

300 多项选择
301 永久移动
302 找到
303 查看其他
304 未修改
305 使用代理
306 未使用
307 临时重定向

400 错误请求
401 需要授权
402 需要付款
403 禁止
404 未找到
405 方法不允许
406 不可接受
407 需要代理身份验证
408 请求超时
409 冲突
410 已消失
411 所需长度
412 不满足先决条件
413 请求实体过大
414 请求 URI 过大
415 不支持的媒体类型
416 请求范围无法
满足 417 不满足期望
418 未使用
419 未使用
420 未使用
421 未使用
422 无法处理的实体
423 已锁定
424 依赖项失败
425 无代码
426 需要升级

500 内部服务器错误
501 方法未实现
502 网关错误
503 服务暂时不可用
504 网关超时
505 HTTP 版本不受支持
506 变量也协商
507 存储不足
508 未使用
509 未使用
510 未扩展

相关内容