web-dev-qa-db-ja.com

複数のドメインを持つhttpsにhttpを自動的にリダイレクトする-コード内から参照されるファイル

重複する質問があることは知っています ここここ しかし、これらは私の問題を解決していません。

ブラウザのURLバーにlocalhostを入力すると、https://localhostに正しくリダイレ​​クトされますが、コード内でhttpを含むファイルをロードするためのすべての呼び出しは、httpsにリダイレクトまたは書き換えられません。 。例えば:

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

VirtualHostセクションのApache構成ファイルでRedirect permanent / https://localhost/を試しました。また、.htaccessRewriteRuleも試しました。

私が得ているFirefoxエラーは次のとおりです。

混合アクティブコンテンツ「http://static/css/colwidth.min.css」の読み込みがブロックされました

bothApacheconfigと.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
1
mseifert

Firefoxエラー私が得ているのは:

それが問題です...ブラウザがこのエラーをトリガーしてからリクエストがサーバーに到達するので、リダイレクトしようとするとサーバーが遅すぎます。

ページ自体がhttps://...にリダイレクトされる場合、そのページ内で参照されるすべてのリソースもhttps://...を使用する必要があります。そうしないと、上記のように「混合コンテンツ」の警告が表示されます。これは、安全なコンテンツが安全でない(HTTP)接続を介してリークされるのを防ぐための基本的なブラウザセキュリティです。

HTMLで絶対URL(schemeを含む)を使用する代わりに、代わりにプロトコル相対URLを使用できます。次に例を示します。

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