我知道这里和这里有重复的问题,但这些还没有解决我的问题。
当在浏览器的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">