【问题标题】:Set HSTS header in htaccess if already isn't present如果已经不存在,则在 htaccess 中设置 HSTS 标头
【发布时间】:2017-11-01 07:43:12
【问题描述】:

我已将 HSTS 设置在一个通用的 .htaccess 中,该 .htaccess 被多个站点使用。

Header set Strict-Transport-Security "max-age=31536000" env=HTTPS

但是当一个站点已经从虚拟主机配置中设置了 HSTS 标头时,恰好有两个 HSTS 标头添加到响应中。

那么在我在 .htaccess 上设置 HSTS 之前,如何检查 HSTS 标头是否已经存在?

【问题讨论】:

    标签: apache .htaccess hsts


    【解决方案1】:

    Header set 没问题。如果你使用Header add,就会有问题。

    添加 : 响应头被添加到现有的头集中,即使这个头已经存在。这可能导致两个(或更多) 具有相同名称的标题。这可能导致无法预料的 后果,通常应该使用 set、append 或 merge 而是。

    设置 :设置响应标头,用此名称替换任何先前的标头。该值可能是格式字符串。

    https://httpd.apache.org/docs/current/en/mod/mod_headers.html

    【讨论】:

      【解决方案2】:

      或者使用 setifempty

      Header always setifempty Strict-Transport-Security "max-age=31536000" env=HTTPS
      

      【讨论】:

      • 谢谢 - 但SetIfEmpty available in 2.4.7 and later, expr=value available in 2.4.10 and later.
      【解决方案3】:

      正如@Croises 报告的那样,默认情况下它应该只是覆盖,但在我的情况下,虚拟主机配置设置的标头使用always 关键字,因此还添加了 .htaccess 设置的标头。

      您也可以使用setifempty,但在我的情况下,我的 Apache 不是最新的(仅支持 2.4.7 及更高版本) 所以我必须像下面这样才能让它工作。

      Header always unset Strict-Transport-Security
      Header set Strict-Transport-Security "max-age=31536000" env=HTTPS
      

      【讨论】:

        猜你喜欢
        • 2014-07-31
        • 2022-12-09
        • 2019-04-26
        • 2019-04-08
        • 2017-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多