将HTTP严格传输安全性添加到.htaccess

时间:2018-01-04 18:51:43

标签: apache .htaccess hsts

我想将HTTP Strict Transport Security指令添加到我的.htaccess文件中。我在这里添加了代码末尾的锁,但是当我测试HSTS预加载过程时,它会显示未设置的设置。我检查了我的Apache配置并看到启用了header模块。

我错过了什么?

<Files .htaccess>
order allow,deny
deny from all
</Files>

<FilesMatch "\.(png|gif|js|css)$">
  ExpiresActive on
  ExpiresDefault "access plus 1 month"
</FilesMatch>

# disable directory autoindexing
Options -Indexes

ErrorDocument 400 http://%{HTTP_HOST}
ErrorDocument 401 http://%{HTTP_HOST}
ErrorDocument 402 http://%{HTTP_HOST}
ErrorDocument 403 http://%{HTTP_HOST}
ErrorDocument 405 http://%{HTTP_HOST}
ErrorDocument 404 /incl/pages/error404.php
ErrorDocument 500 http://%{HTTP_HOST}

RewriteEngine On

RewriteBase /
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

# BEGIN GZIP
<ifmodule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
</ifmodule>
# END GZIP

# Use HTTP Strict Transport Security to force client to use secure connections only
<ifmodule mod_headers.c>
    Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
</ifmodule>

我测试了herehere

2 个答案:

答案 0 :(得分:0)

对于重定向,您需要使用always属性:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS

来自mod_headers documentation

  

您正在为本地生成的非成功(非2xx)响应添加标头,例如重定向,在这种情况下,在最终响应中仅使用与always对应的表。

答案 1 :(得分:0)

对于Apache 2.2,无论您是否指定Header always set x x env=HTTPS,{@ 1}}都不会与重定向匹配。

我的建议:将您的VirtualHosts分开,以便它们不会混合使用明文/ ssl端口,然后在仅限ssl的VirtualHosts上无条件地指定SSLOptions +StdEnvVars

检查httpd-2.2.15-60.el6.centos.6.x86_64