web-dev-qa-db-ja.com

マルチサイトサブドメインの子サイトへのSSLプロトコルの強制+ cPanel設定

サブドメインを使用してWPマルチサイトを運営しています。すべてのリクエストに対してSSLプロトコルを強制したいのですが、子サイトでのSSL以外のリクエストに対して問題が発生しています。私は WP Force SSL プラグインを使っています。少し掘り下げて、次の.htaccessディレクティブを試しましたが、うまくいきません(また何もしません)。

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]

例えば:

編集1

私は自分のホスト(cPanelがインストールされている専用サーバー)とcPanel(私はまだオープンチケットを持っている後者)の両方に連絡を取りました。 cPanelは述べています:

CPanel上のApacheは、あなたが慣れ親しんでいるかもしれない他のサーバとは少し異なって設定されています。デフォルトでは、Apacheはワイルドカードとして設定されているため、要求されているドメイン名を受け入れます。 cPanelサーバーでは、仮想ホストは作成したドメイン用に特別に構成されています。たとえば、defectlawyer.com用のcPanelアカウントを作成したときには、defectlawyer.com固有の設定がセットアップされています。私のドメインthisisarealdomain.comのDNSをあなたのサーバーに向けるとしましょう。 thisisarealdomain.comを要求すると、Apacheはそのドメインの設定を確認し、見つからなかった場合は、cPanelのデフォルトページを返します。

あなたのDNSが正しく設定されているように聞こえます。私はあなたのサーバを指すワイルドカードサブドメインレコードを想定していますが、Apacheは要求されていることをどうするかわかりません。少なくともSSL以外の面では。この問題を解決するには、cPanel [ https://documentation.cpanel.net/display/ALD/Subdomains ]にワイルドカードサブドメインを追加して、* .derpsite.tld用のApache仮想ホストを追加します。 。それから、anything。derpsite.tldが要求されると、Apacheはその仮想ホストを見つけて何をロードすべきかを知ることができます。

SSLバージョンが機能している可能性がある理由は、おそらくそのSSL仮想ホストを作成する* .derpsite.tldとしてSSLをインストールしたためです。

この入力に基づいて私は持っています:

  • CPanel内にワイルドカードサブドメインを追加しました(そしてサブドメインのドキュメントルートがメインサイトのルートを指すようにしました)...これは500 internal server errorhttp://child1.derpsite.tldの両方にhttps://child1.derpsite.tldを追加します)
  • 現在SSLの設定方法を確認しています

編集2

上記の500 internal server errorは、私のSSLをワイルドカードドメインにインストールした結果であるようです。下記の ' answer 'をご覧ください。

1
Ryan Dorn

あなたが得るエラーの説明から、それはあなたがhttpで子供にアクセスしようとしたときにあなたのアカウント関連のソフトウェアにまったく到達していないようです。これはWebサーバーの設定エラーのように聞こえるので、あなたのケースではあなたはあなたのcpanelであなたがhttpだけでなくhttpのサブドメインを有効にしたことを確認する必要があります。

2
Mark Kaplun

これについてコメントしてくれたすべての人のおかげで、それは間違いなく正しい方向に私を導くのに役立ちました、そして最後に、私は何が起こったのかを知っていると信じています。これはいくつかの要因の組み合わせでした。これは 'strictlyWP related'ではなく、cPanel、以下は何らかの助けになるはずです。私はいくつかの「経験則」項目をまとめました。これらの項目をすべてまとめると、SSLプロトコルを強制する問題を解決したようです。

  • siteurlおよびhome各サイトのオプションデータベーステーブル(またはwp-admin ... ~/wp-admin/network/sites.php > Edit Site > Site Address (URL)各サイト)のフィールドは、URLでhttps://を使用する必要があります
  • ワイルドカードSSLを使用している場合(サブドメインドリブンマルチサイトでSSLを使用したいほとんどの人に当てはまると思います)installed forワイルドカードドメインではなくルートドメイン。 SSLを* derpsite.tldにインストールし、derpsite.tldのSSLを削除/再インストールしました
  • DNSでは、「A」ワイルドカードレコードはサーバーIPを指す必要があります。つまり、*.derpsite.tld -> YOURSERVERIP
  • CPanelでは、 ワイルドカードサブドメイン*.derpsite.tld)を作成する必要があり、サブドメインディレクトリをルートディレクトリにする必要があります(ほとんどのcPanel場合、これは/public_htmlになります...マルチサイトを実行している場合、実際には「子サイト」サブドメイン用の実際のディレクトリを作成したくないため)
  • 追加の注意:ドメインマッピングを行っている場合、SSLを介して強制的に実行するには、WHMまたはcPanelを介して外部ドメインを「 park 」する必要があります。また、 4.5+ドメインマッピングはネイティブ )の時点で。 注意:執筆時点では、WP v.4.8.2およびcPanel v.66.0.23を使用しています... WPを実行しているサイト4.5より前のバージョンでは、異なる構成が必要になる場合があります
  • これが必要かどうかはわかりませんが、ルート.htacessファイルには次のディレクティブがあります。

RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_Host} ^my\-mapped\-external\-domain\.tld[NC] RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://my-mapped-external-domain.tld/$1 [R,L]

これが誰かを助けることを願っています!

1
Ryan Dorn

これは2つの異なるドメインに分類されるため、2つの部分に分けて行う必要があります。これを試して:

RewriteEngine On 
RewriteCond %{HTTP_Host} ^derpsite\.tld [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://derpsite.tld/$1 [R,L]

RewriteCond %{HTTP_Host} ^child1\.derpsite\.tld [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://child1.derpsite.tld/$1 [R,L]
0
SEO DEVS

Webサーバーを適切に構成していれば、通常SSLを強制するためにプラグインを実行する必要はありません。

Settings -> Generalが必要で、両方のURLをhttps://ではなくhttp://に変更するだけです。また、キャッシングプラグインを削除することは常に良い考えです。私が見たように、SSL証明書は適切に配置されており、あなたが言ったことに基づいてあなたのために働いています。

あなたが言及したこのプラグインの核心はこれです:

// "The Core"
define('FORCE_SSL' , true);

if (defined('FORCE_SSL'))
  add_action('template_redirect', 'force_ssl');

function force_ssl(){

if ( FORCE_SSL && !is_ssl () )
 {
  wp_redirect('https://' . $_SERVER['HTTP_Host'] . $_SERVER['REQUEST_URI'], 301 );
  exit();
 }
}

ご覧のとおり、PHPまたはWordPressが強制的にリダイレクトされています。代わりに、これらのリダイレクトはWebサーバーレベルでより良く、よりスマートになります。 PHPを使用する必要はありません。

0
prosti