【问题标题】:.htaccess - How do I capture the incoming request`s HTTP Status Code?.htaccess - 如何捕获传入请求的 HTTP 状态代码?
【发布时间】:2016-08-26 20:57:47
【问题描述】:

您知道 Apache 有许多服务器变量,例如 %{REQUEST_URI}%{ENV:REDIRECT_STATUS}

当前请求的 HTTP 状态码的变量名是什么?

我问这个是因为我想写一个RewriteCond,上面写着'如果 HTTP 状态代码是302,那么......'。但我无法弄清楚服务器变量是什么。

非常感谢您的帮助!

【问题讨论】:

  • 该代码可能不可用,因为在请求处理完成之前无法确定它。例如如果您正在使用“漂亮”的 url,那么测试 200 代码是没有意义的,因为漂亮的 url 几乎永远不会作为服务器上的实际文件存在。所以根据定义,所有漂亮的 url 本身都是 404。只有他们被重写的 TO 才会是 200。
  • 谢谢马克,感谢您提供的信息!

标签: apache .htaccess


【解决方案1】:

没有请求状态码这样的东西。只有从服务器发送回客户端的响应具有HTTP status code

您可以做的最接近的方法是通过ErrorDocument 指令设置Custom Error Responses。这意味着,基于某些状态代码,例如404,您可以调用一些服务器端脚本,它会适当地起作用。

ErrorDocument 404 /var/www/html/errors/handle_404.php

这适用于以 400 和 500 开头的状态码,但不适用于 200 或 300 范围内的响应码。再次查看Custom Error Responses

可以为任何指定为错误条件的 HTTP 状态代码定义自定义错误响应 - 即任何 4xx 或 5xx 状态。


寻址cmets,ErrorDocument的语法定义为

语法:ErrorDocument 错误代码文档

所以只有error-code (4xx-5xx) 需要处理,还有一些文档需要显示或执行,没有办法定义任何额外的标志。

【讨论】:

  • 谢谢奥拉夫。我很欣赏你简洁的回答。错误文档对我没有帮助,但现在我知道我需要找到另一个解决方案来解决我的问题。
  • 也许filters 是另一种选择,尽管我没有使用这些的经验。您必须仔细阅读手册,看​​看是否有合适的内容。
  • 嘿奥拉夫 - 谢谢。这是我现在想要实现的目标:我有一个 php 脚本和一个 apache rewriteRule 正在创建一个无限循环......我希望 apache 只重定向到 xwz.php 如果 xyz.php 不是刚刚重定向到的那个这个当前资源。我只是不知道该怎么说。也许您对如何实现这一点有一些指示?
  • ErrorDocument 404 /var/www/html/errors/handle_404.php [R=200, L] 这是正确的,如果我想为所有404 页面传递200 OK 响应代码?
  • @RajeevRanjanSharma 如果这是一个问题,请提出一个新问题!除此之外,ErrorDocument 的“语法”部分非常清楚:语法:ErrorDocument 错误代码文档。所以任何地方都没有状态代码或标志。
猜你喜欢
  • 1970-01-01
  • 2019-07-22
  • 2015-01-20
  • 2022-06-23
  • 2019-01-07
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多