web-dev-qa-db-ja.com

wp-config.phpを介してwordpressでSSLを正しく強制する

wp-config.phpを編集すると、次のように追加することになります。

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

ただし、私のウェブサイトには、ウェブサイト全体でhttpsとwwwを強制する.htaccessルールがあります。

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_Host} ^website.com
RewriteRule ^(.*)$ https://www.website.com/$1 [L,R=301]

他にも利用可能なリライタルがあることは知っていますが、どちらが正しいのかはわかりません。

wp-config.phpでは次の3つを使用する必要があります

1-isset()なし、中括弧付き、server_portあり

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = 443;
}

2-中括弧なし&server_portなし?

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
    $_SERVER['HTTPS'] = 'on';

3-中かっこは必要ですか/それとも「もっと正確」ですか?server_portは必要ですか?

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = 443;
}

wordpress SSLについて、インターネット上でこれとは少し異なる他のバリエーションがいくつか見つかりましたが、正しい/メインのSSLがわかりません...

18
Ryflex

このような場合、PHPコードはSSLをまったく扱う必要がありません。ここでは、古典的な SoC 原則を適用します。コードが接続で明示的に機能しない場合(WP機能しない場合))、プロトコルチェックをWebサーバーに任せる必要があります。

また、書き換えルールでポートを定義しないでください。マルチサイトWPセットアップを使用していない場合は、次の方法を試してください:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
12
Evgeny Soynov

これを使った。続けても大丈夫です。

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
   $_SERVER['HTTPS']='on';

サーバーポートが443と異なる場合は、それを指定できます。それ以外の場合は、再度使用する必要はありません。

8
user3094069

修正された.htaccessルール( wiki.Apache.orgで詳細 ):

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://mysslcertdomainname.com/$1 [R,L]

通常、コード例(1、2、3)はWordpressでは必要ありませんが、質問に基づいたある種のプロキシがあるようです。

  1. 良くないHTTP_X_FORWARDED_PROTOがWebサーバーによって設定されていない場合、PHP警告(標準のphp設定)を生成します。
  2. Good値をチェックする前に変数が存在するかどうかをチェックします。警告を生成しません。
  3. 良い最高**

**一般的なルールとして、_SERVER変数(SERVER_PORTHTTPSなど)を変更することは、あまり一般的ではない設定(つまり、プロキシの背後にある-これが唯一の方法)でない限り、お勧めできませんこのコードの理由)。

4
h0tw1r3