2017-01-10 14 views
0

私はAWS EC2インスタンス上で動作するWordpressウェブサイトを持っています。これは、AWS Elastic Load Balancerを通じて提供されます。これは、Amazonから取得した証明書をHTTPSで有効にしています。ロードバランサの後ろのWordpress get_template_directory_uri()

ウェブサイトのhttpバージョンとhttpsバージョンの両方を提供することを意図しています。 HTTPバージョンをロードするとうまく動作します。

ただし、httpsバージョンを読み込むと、get_template_directory_uri()は常にhttpリンクを返すため、混在したコンテンツエラーが発生します。ロードバランサの動作は、LBでTLSが終了し、ポート80を介して実際のEC2インスタンスと通信するため、インスタンス自体にHTTPSはありません。

これは多く私の癒しのスキルを超えています。私は問題がどんなものか分かりましたが、それを修正する正しい方法が本当にわかりません。

私は依然としてページのhttpとhttpsバージョンの両方を提供したいと考えています(ページにはeコマースや認証がありません - これは単なる情報提供です)、これを修正するにはどうすればいいですか?

FYIでは、EC2インスタンスは基本的にRHELであるAmazon ABI上で実行されています。

答えて

2

まず、WordPressは絶対リンク(つまりhttp:s:// mydomain)として多くのリンクを保存するため、httpとhttps WordPressの両方を同じデータベースデータから実行するのは難しいでしょう。 comの部分)、多くのプラグインは現在のプロトコルにも慣れていません。

すべてのhttpトラフィックをhttpsにリダイレクトするには、htaccessファイルからリダイレクトを行うのが最善です。言われて、あなたはあなたが求めて何ができ片道がget_template_directory_uriが使用するフィルタを介してであることを

add_filter('template_directory_uri', 'smart_template_directory_uri', 10, 3); 
function smart_template_directory_uri($template_dir_uri, $template, $theme_root_uri) { 
    return preg_replace('/^https?\:/i', '//', $template_dir_uri); // replace "http://" or "https://" by "//", which browsers will automatically set to the current page's protocol 
} 

は、この情報がお役に立てば幸い!

+0

ありがとうございました。あなたが投稿したコードは、すべてのリンクを 'https'リンクに変換します。そうですか?したがって、ページ自体は 'http'を介して提供されますが、その内部に埋め込まれたものは' https'を介して配信されるでしょうか? –

+0

Doh - 申し訳ありませんが、私の答えを編集しました。 – MacPrawn

+0

ああ、OK、今すぐ入手します。すべてのブラウザ(現代のものと仮定しましょう)が '//'を 'http [s]://'に変換することは安全でしょうか? –

関連する問題