【问题标题】:Overwrite HTTP response code using .htaccess使用 .htaccess 覆盖 HTTP 响应代码
【发布时间】:2022-01-02 07:08:06
【问题描述】:

我正在尝试使用 .htaccess 将 HTTP 标头响应代码覆盖为另一个响应代码。

我想改变

HTTP 404200 OK

HTTP 403200 OK

.ht 访问代码:

    RewriteEngine On

#ErrorDocument
ErrorDocument 403 /forbidden.html
ErrorDocument 404 /notfound.html
ErrorDocument 500 /servererror.html

# Disable directory browsing 
Options -Indexes

#Change status code  to 200 OK
<IfModule mod_headers.c>
  <If "%{REQUEST_STATUS} in { '404','403', '500' }">
      Header set HTTP/1.1 "200 OK"
      Header set HTTP/2 "200 OK"
  </If>
</IfModule>

轻松使用 PHP:header("Status: 200 OK");

但我想使用 .htaccess 来做到这一点。知道如何覆盖 HTTP 响应代码

注意:我不是在寻找重定向。

【问题讨论】:

  • @MrWhite 因为我的团队领导和客户要求它:(。你能帮我解决如何用 htaccess 覆盖 HTTP 响应代码吗?
  • @MrWhite 我的客户希望用 htaccess 覆盖响应代码。你能帮我用覆盖响应代码的htaccess代码吗:)
  • 正如我所说,这取决于如何设置响应代码......如果应用程序(例如 PHP)正在设置 404/403 响应,那么您不能简单地覆盖响应代码使用.htaccess。所以,就目前而言,你的问题是不完整的......首先如何设置 404/403 响应?
  • "如果有人访问了一个不存在的链接" - 该链接通常会映射到静态文件?不是通过 WordPress 等 CMS 吗?并且您仍想返回“未找到”页面但返回 200 OK 响应?
  • @shanmugapradeep 你已经问过两次完全相同的问题了!我已将最近的问题标记为此问题的副本,该问题未关闭。

标签: apache .htaccess mod-rewrite http-status-code-404 http-status-code-403


【解决方案1】:

这确实是一个非常有趣的问题,我花了几个小时浏览文档并多次测试以提出以下解决方案。

在你的文档根目录 .htaccess 中添加这个 sn-p:

# serve /index.php for 200
ErrorDocument 200 /index.php

# serve FallbackResource with status=200 to handle 404
FallbackResource /index.php

# declare ErrorDocument for all the error codes you want to handle
# note that dummy file or directory doesn't exist.
# This will set REDIRECT_STATUS to 403
ErrorDocument 403 /dummy

RewriteEngine On

# force Status=200 if REDIRECT_STATUS is 403
RewriteCond %{ENV:REDIRECT_STATUS} =403
RewriteRule ^ - [L,R=200]

【讨论】:

  • 感谢先生分享好的解决方案,所以这意味着如果重定向状态是 403 或 404,那么它会让他们 200 好吗?抱歉,可能是我没听懂,请您再解释一下,谢谢。
  • 是的,没错@RavinderSingh13。 REDIRECT_STATUS 是由于使用了ErrorDocument 指令而设置的。
  • 感谢先生澄清,但一个简单的问题是:为什么对于不存在的页面(404 错误)有人需要 200(没有从后端提供任何实际文件)?虽然我阅读了 cmets,但仍然想知道您对此的看法。
  • 我个人只会为观众放置一个自定义的 404 页面,但 OP 有不同的要求
  • 是的,我完全同意你的看法,因为如果管理员看到日志(如果出现问题,特别是 tomcat 的本地主机日志等),那么日志中的 200 状态可能会让他们感到困惑(如果他们不知道关于规则的存在),虽然在不知道全部要求的情况下仍然很难说,但正如您提到的那样,制作自定义 404 页面会很棒,谢谢先生。
猜你喜欢
  • 2014-10-12
  • 1970-01-01
  • 2011-12-21
  • 2017-08-06
  • 1970-01-01
  • 2014-01-08
  • 2016-12-11
  • 2020-11-12
相关资源
最近更新 更多