自动将 http 重定向到具有多个域的 https - 从代码中引用的文件

mse*_*ert 1 ssl .htaccess apache-2.2 apache-2.4

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

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

<link rel="stylesheet" type="text/css" href="http://static/css/colwidth.min.css">
Run Code Online (Sandbox Code Playgroud)

Redirect permanent / https://localhost/在 Apache 配置文件VirtualHost部分中尝试过RewriteRule,我也尝试过.htaccess

Firefox我得到的错误是:

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

我将不胜感激帮助了解如何与做Apache的配置和.htaccess(我知道.htaccess是不是首选方法-但我还是想知道为什么它不工作)

网址:

<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>                                  
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

.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
Run Code Online (Sandbox Code Playgroud)

MrW*_*ite 6

我收到的Firefox 错误是:

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

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

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

<link rel="stylesheet" type="text/css" href="//static/css/colwidth.min.css">
Run Code Online (Sandbox Code Playgroud)