使用多个域自动将httpredirect到https – 从代码内引用的文件

我知道这里和这里有重复的问题,但这些还没有解决我的问题。

当在浏览器的url栏中键入localhost时,它将被正确地redirect到https://localhost ,但是在我的代码中用于加载具有http文件的所有调用都不会被redirect或重写为https 。 例如:

 <link rel="stylesheet" type="text/css" href="http://static/css/colwidth.min.css"> 

我已经尝试在VirtualHost部分的Apacheconfiguration文件中Redirect permanent / https://localhost/ ,我也尝试使用.htaccess RewriteRule

我得到的Firefox错误是:

阻止加载混合活动内容“ http://static/css/colwidth.min.css

我将不胜感激帮助理解如何做到这一点与Apacheconfiguration和.htaccess (我知道.htaccess不是首选的方法 – 但我仍然想明白为什么它不工作)

HTTP:

 <VirtualHost *:80> ServerAdmin me@localhost DocumentRoot "D:/Website/path/to/root" ServerName localhost Redirect permanent / https://localhost/ <Directory "D:/Website/path/to/root"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require ip 127.0.0.1 </Directory> </VirtualHost> <VirtualHost *:80> ServerAdmin me@localhost DocumentRoot "D:/Website/path/to/root" ServerName static Redirect permanent / https://static/ <Directory "D:/Website/path/to/root"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require ip 127.0.0.1 </Directory> </VirtualHost> <VirtualHost *:443> DocumentRoot "D:/Website/path/to/root" ServerName localhost:443 ServerAdmin me@localhost ErrorLog "c:/xampp/apache/logs/error.log" TransferLog "c:/xampp/apache/logs/access.log" <Directory "D:/Website/path/to/root"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require ip 127.0.0.1 </Directory> SSLEngine on SSLCertificateFile "c:/xampp/apache/bin/wtr.cert" SSLCertificateKeyFile "c:/xampp/apache/bin/wtr.key" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "c:/xampp/apache/cgi-bin"> SSLOptions +StdEnvVars </Directory> CustomLog "c:/xampp/apache/logs/ssl_request.log" \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost> 

HTTPS:

 <VirtualHost *:443> DocumentRoot "D:/Website/path/to/root" ServerName static:443 ServerAdmin me@localhost ErrorLog "c:/xampp/apache/logs/error.log" TransferLog "c:/xampp/apache/logs/access.log" <Directory "D:/Website/path/to/root"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require ip 127.0.0.1 </Directory> SSLEngine on SSLCertificateFile "c:/xampp/apache/bin/static.cert" SSLCertificateKeyFile "c:/xampp/apache/bin/static.key" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "c:/xampp/apache/cgi-bin"> SSLOptions +StdEnvVars </Directory> CustomLog "c:/xampp/apache/logs/ssl_request.log" \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost> 

的.htaccess

 RewriteEngine On # For SSL RewriteCond %{HTTPS} !=on RewriteRule (.*) https://%{SERVER_NAME}/$1 [L,R=301] # I also tried: #RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}[L,R=301] #Rules for Versioned Static Files RewriteRule ^(js|js-common|css|css-common|img|img-common)/(.+)\.([0-9])+\.(js|css|php|jpg|gif|png)(.*)$ $1/$2.$4$5 [L] #rename invalid file and directory requests RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?redirectroot=true 

我得到的Firefox错误是:

这就是问题… 浏览器在请求到达服务器之前触发了这个错误,所以任何在服务器上redirect的尝试都为时已晚。

如果页面本身被redirect到https://...那么该页面中的所有引用资源也必须使用https://... ,否则,您将得到如上所述的“混合内容”警告。 这是基本的浏览器安全,以防止通过不安全 (HTTP)连接泄漏任何安全内容。

而不是在HTML中使用绝对URL(包括scheme ),您可以使用协议相对URL,例如:

 <link rel="stylesheet" type="text/css" href="//static/css/colwidth.min.css">