ルートWebサイト(example.com
)とそのフォルダー(example.com/folder
)には2つの異なるCMS(example.com
のOpencartとexample.com/folder
のWordPress)があります。
このコードをexample.com
で使用して、www以外のhttpsモードを強制します。
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
このコードはexample.com
に対して完全に機能し、そのすべてのサブフォルダーはWordPress CMSでexample.com/folder
を想定しています。
私は何をすべきか?
おそらく、これらのディレクティブをサブディレクトリのWordPressインストールにも適用する必要がありますが、現時点ではWordPressに対して何もしていません。
これは、WordPress "pretty"パーマリンクを有効にしている場合に予想される動作です。 (サブディレクトリ内の)WordPress .htaccess
ファイル内のmod_rewriteディレクティブは、親.htaccess
ファイル内のmod_rewriteディレクティブを完全にオーバーライドするためです。親.htaccess
のmod_rewriteディレクティブは処理されません。
Mod_rewriteの継承を利用できますが、これは親.htaccess
ファイルとサーバー設定(特にApacheバージョン)にある他のmod_rewriteディレクティブに依存します。また、OpenCartとWordPressの構成をできるだけ分離しておくことはおそらく有益です。
最も簡単な解決策は、WordPressサブディレクトリの.htaccess
ファイルの先頭でこれらのディレクティブを再現することです。ただし、変更せずに単純にコピーすることはできません。そうしないと、www
サブドメインを要求するときに、リダイレクトされたURLからサブディレクトリが失われる可能性があります。
たとえば、example.com/folder/.htaccess
ファイルの先頭で次を試してください。
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule .* https://%1%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]