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

ins*_*dnz 4 .htaccess ssl https redirect

有没有办法使用htaccess重定向条件和重定向来捕获通过HTTPS访问网站时通过HTTP调用的内容?

如果通过HTTPS访问网站,http内容将被重定向到https等效网址?

从本质上讲,当我的网站通过HTTPS访问时,我想要一种自动化的方式来清理和处理混合内容.

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

RewriteRule ^/(.*):SSL$   https://%{SERVER_NAME}/$1 [R,L]
RewriteRule ^/(.*):NOSSL$ http://%{SERVER_NAME}/$1 [R,L]
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,这不会重定向在我的站点上的图像请求(例如)在HTTPS会话期间通过HTTP调用.

我也试过这个规则,

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Run Code Online (Sandbox Code Playgroud)

但这也没有重定向图像.

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

Bar*_*ard 10

这不行.

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

您要做的是使用Content-Security-Policy要求Web浏览器在加载页面时更新请求

Header always set Content-Security-Policy: upgrade-insecure-requests
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此处:https://www.w3.org/TR/upgrade-insecure-requests/

注意浏览器支持是这样的:http://caniuse.com/#search=upgrade%20insecure


Aka*_*kam 8

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

<ifModule mod_headers.c>
Header always set Content-Security-Policy "upgrade-insecure-requests;"
</IfModule>
Run Code Online (Sandbox Code Playgroud)

您可以在 Ubunto 中使用以下命令启用模式标头:

a2enmod headers
apache2 -k graceful
Run Code Online (Sandbox Code Playgroud)

如果您无法编辑 .htaccess 或启用模式标头,那么您可以在 HTML 标头中添加以下行<head>...</head>

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
Run Code Online (Sandbox Code Playgroud)


Jas*_*ler -1

这行不通:

  RewriteEngine On 
  RewriteCond %{SERVER_PORT} 80 
  RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]
Run Code Online (Sandbox Code Playgroud)

只需将其放在您拥有的任何其他规则之前即可

条件也可以更改为

 RewriteCond %{SERVER_PORT} !^443$
Run Code Online (Sandbox Code Playgroud)