web-dev-qa-db-ja.com

ディレクトリとそのサブフォルダーに強制的に非www httpsモード

ルート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を想定しています。

私は何をすべきか?

1
Pasakgroup

おそらく、これらのディレクティブをサブディレクトリの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]
1
MrWhite