用HSTS重定向apache

分享于 

3分钟阅读

互联网

  繁體

问题:

我需要在打开HSTS的情况下将所有example.com重定向到https://www.example.com。在vhost80和vhost443中,如何实现它,

在vhost 80中


RewriteCond %{SERVER_NAME} =www.example.com [OR]


RewriteCond %{SERVER_NAME} =*.example.com [OR]


RewriteCond %{SERVER_NAME} =example.com


RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]



在vhost 443中


RewriteCond %{HTTP_HOST} ^example.com$ [NC]


RewriteRule (.*) https://www.example.com$1 [R=301,L]




答案1:

假设只有两个vHost容器,一个用于端口80,仅处理对example.com和www.example.com的请求;另一个用于端口443,又用于处理example.com和www.example.com的请求。然后。


RewriteCond %{SERVER_NAME} =www.example.com [OR]


RewriteCond %{SERVER_NAME} =*.example.com [OR]


RewriteCond %{SERVER_NAME} =example.com


RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]



你只需要删除所有条件,只需要RewriteRule指令,例如:


RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [END,NE,R=permanent]



还需要确保重定向到相同的主机名,因此使用HTTP_HOST,而不是SERVER_NAME,尽管SERVER_NAME默认与HTTP_HOST yf_yf相同,但是这取决于服务器配置中的UseCanonicalName指令。


为了完整起见,这是MrWhite建议的更简单的mod_alias替代方案。首先重定向三个虚拟主机,然后是实际的虚拟主机服务内容。


<VirtualHost *:80>


 ServerName example.com


 Redirect permanent / https://example.com/


</VirtualHost>



<VirtualHost *:80>


 ServerName www.example.com


 Redirect permanent / https://www.example.com/


</VirtualHost>



<VirtualHost *:443>


 ServerName example.com


 Redirect permanent / https://www.example.com/



 # The mandatory SSL* directives.



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


</VirtualHost>



<VirtualHost *:443>


 ServerName www.example.com


 DocumentRoot /var/www/html



 # The mandatory SSL* directives.


 # . . . whatever else you may have here



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


</VirtualHost>





RED  Apache  Redirect  hsts  
相关文章