サブドメインを使用してWPマルチサイトを運営しています。すべてのリクエストに対してSSLプロトコルを強制したいのですが、子サイトでのSSL以外のリクエストに対して問題が発生しています。私は WP Force SSL プラグインを使っています。少し掘り下げて、次の.htaccessディレクティブを試しましたが、うまくいきません(また何もしません)。
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
例えば:
http://child1.derpsite.tld/cgi-sys/defaultwebpage.cgi
cPanelエラーページが表示されます。編集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をインストールしたためです。
この入力に基づいて私は持っています:
500 internal server error
とhttp://child1.derpsite.tld
の両方にhttps://child1.derpsite.tld
を追加します)編集2
上記の500 internal server error
は、私のSSLをワイルドカードドメインにインストールした結果であるようです。下記の ' answer 'をご覧ください。
あなたが得るエラーの説明から、それはあなたがhttpで子供にアクセスしようとしたときにあなたのアカウント関連のソフトウェアにまったく到達していないようです。これはWebサーバーの設定エラーのように聞こえるので、あなたのケースではあなたはあなたのcpanelであなたがhttpだけでなくhttpのサブドメインを有効にしたことを確認する必要があります。
これについてコメントしてくれたすべての人のおかげで、それは間違いなく正しい方向に私を導くのに役立ちました、そして最後に、私は何が起こったのかを知っていると信じています。これはいくつかの要因の組み合わせでした。これは 'strictlyWP related'ではなく、cPanel、以下は何らかの助けになるはずです。私はいくつかの「経験則」項目をまとめました。これらの項目をすべてまとめると、SSLプロトコルを強制する問題を解決したようです。
siteurl
およびhome
各サイトのオプションデータベーステーブル(またはwp-admin ... ~/wp-admin/network/sites.php > Edit Site > Site Address (URL)
各サイト)のフィールドは、URLでhttps://
を使用する必要がありますderpsite.tld
にインストールし、derpsite.tld
のSSLを削除/再インストールしました*.derpsite.tld -> YOURSERVERIP
*.derpsite.tld
)を作成する必要があり、サブドメインディレクトリをルートディレクトリにする必要があります(ほとんどのcPanel場合、これは/public_html
になります...マルチサイトを実行している場合、実際には「子サイト」サブドメイン用の実際のディレクトリを作成したくないため).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]
これが誰かを助けることを願っています!
これは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]
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を使用する必要はありません。