.htaccess 什么';将混合内容重定向到HTTPS的正确htaccess规则

.htaccess 什么';将混合内容重定向到HTTPS的正确htaccess规则,.htaccess,redirect,ssl,https,.htaccess,Redirect,Ssl,Https,当通过HTTPS访问站点时,是否有一种使用htaccess重定向条件和重定向的方法来捕获通过HTTP调用的内容 如果通过https访问站点,http内容将重定向到https等效url 基本上,当我的网站通过HTTPS访问时,我希望有一种自动清理和处理混合内容的方法 到目前为止,以下修复了通过HTTPS访问站点时通过HTTP调用的所有.css和.js文件 RewriteRule ^/(.*):SSL$ https://%{SERVER_NAME}/$1 [R,L] RewriteRule ^/

当通过HTTPS访问站点时,是否有一种使用htaccess重定向条件和重定向的方法来捕获通过HTTP调用的内容

如果通过https访问站点,http内容将重定向到https等效url

基本上,当我的网站通过HTTPS访问时,我希望有一种自动清理和处理混合内容的方法

到目前为止,以下修复了通过HTTPS访问站点时通过HTTP调用的所有.css和.js文件

RewriteRule ^/(.*):SSL$   https://%{SERVER_NAME}/$1 [R,L]
RewriteRule ^/(.*):NOSSL$ http://%{SERVER_NAME}/$1 [R,L]
但由于某些原因,这不会重定向在HTTPS会话期间通过HTTP调用我的站点上的图像请求(例如)

我也试过这个规则,

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
但这也没有改变图像的方向

我认为必须有一种方法来测试连接是否通过HTTPS,然后将任何http://URL重写为HTTPS://等价物。我只是不知道如何正确地制定规则。

这不管用吗:

  RewriteEngine On 
  RewriteCond %{SERVER_PORT} 80 
  RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]
把它放在其他规则之前

也可将条件更改为

 RewriteCond %{SERVER_PORT} !^443$
这行不通

浏览器将看到http请求并将页面标记为包含不安全内容。这是正确的,因为请求将通过http发出,然后重定向到https。因此它是不安全的

您要做的是使用内容安全策略要求web浏览器在加载页面时更新请求

Header always set Content-Security-Policy: upgrade-insecure-requests
有关更多信息,请参见此处:

注意:对于以下情况,浏览器支持是混合的:

基本上,当我的网站通过HTTPS访问时,我希望有一种自动清理和处理混合内容的方法

建议将流量从HTTP重定向到HTTPS,但请注意这不会修复混合内容错误

事实上,如果从安全页面加载不安全的资源,无论资源是否重定向到安全页面,浏览器都会在任何情况下显示错误

换句话说,如果页面
index.html
加载
https://example.com/logo.png
http://example.com/logo.png
重定向到
https://example.com/logo.png
,浏览器仍将显示混合内容警告。原因是来自安全页面的第一个请求在任何情况下都被发送到不安全的地址,以便获取响应(在本例中检测重定向)

也就是说,为了从HTTP重定向到HTTPS,您可以使用该规则

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

相反,修复混合安全错误的唯一方法是更改页面内容(或应用程序/框架/用于创建页面的任何内容)以指向嵌入/加载/引用的资源的安全版本,当然,假设可以在安全服务器上访问资源。

如果可以启用模式头,则可以将此代码添加到.htaccess或主机配置文件:

<ifModule mod_headers.c>
Header always set Content-Security-Policy "upgrade-insecure-requests;"
</IfModule>
如果您无法编辑.htaccess或启用模式标题,则可以在HTML标题下的


由于浏览器未执行http请求,因此出现混合内容错误。太晚了。您应该尝试更正页面,使其调用https资源(升级不安全请求可能是临时修复)
a2enmod headers
apache2 -k graceful
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">