web-dev-qa-db-ja.com

Img srcにhttpsを使用

私のサイトでは、すべてのimg src HTMLにhttpsを使用する必要があります。

これは私が画像を表示するために使っているWordPressの機能です:

<img src="'.get_bloginfo("template_url").'/images/thumb-default.gif" />

これはhttp img srcを出力します - どうすればそれをhttpsに変換できますか?

5
Ryan

WordPressは、is_ssl()を使用してURLを作成する前に、get_bloginfo()の戻り値を確認します。この関数がtrueを返すと、httpsのURLが作成されます。 falseが返されると、http URLが作成されます。

WordPressのソースから...

function is_ssl() {
    if ( isset($_SERVER['HTTPS']) ) {
        if ( 'on' == strtolower($_SERVER['HTTPS']) )
            return true;
        if ( '1' == $_SERVER['HTTPS'] )
            return true;
    } elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
        return true;
    }
    return false;
}

つまり、リクエストがhttps経由で行われた場合、またはリクエストがポート443経由で受信された場合、get_bloginfo()https://のURLを返します。実際、httpsを強制している場合は、すべての要求をポート80(http)からポート443(https)に強制する必要があります。ただし、これはWordPressの問題ではなくサーバー構成の問題です。

あるいは、フィルタにフックしてhttpをhttpsに置き換えることもできます。

ただ使用してください:

function replace_http( $original ) {
    // use preg_replace() to replace http:// with https://
    $output = preg_replace( "^http:", "https:", $original );
    return $output;
}

add_filter( 'template_url', 'replace_http' );
8
EAMann

home_url() 関数を使用すると自動的にsslを検出してプロトコルを変更します。

0
Sam Margulies

EAMannが提案した修正に追加するために、バージョン3.5でいくつかの変更を加えました。

add_filter( 'template_directory_uri', function( $original ) {
    $output = preg_replace( "/^http:/i", "https:", $original );
    return $output;
});

このリダイレクトは非常に役に立つかもしれませんが、私のサーバーはSSLを別のポートにリダイレクトし、WPによって検出されないので、私にとっては厄介です。

0
René Olivo

httpまたはhttpsリンクでページをリクエストするときにこれをチェックしましたか? is_ssl() はあなたに何を返しますか?

私は現時点でテストするSSL対応のスタックを持っていませんが、リンクをまとめたWP関数がSSLを認識して正しいバージョンを出力するはずであることは確かです。

0
Rarst