Apacheは、フォルダーのサブフォルダーでHTTPSを強制しませんが、第1レベルのサブフォルダーで機能します。
私が試したすべてのHTAccessスニペットを以下に示します。
RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"'
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [R=302,L]
RewriteCond %{HTTP_Host} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_Host}/$1 [R=302,L]
RewriteCond %{SERVER_PORT} !=443 [OR]
RewriteCond %{HTTP_Host} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_Host/$1 [R=302,L]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=302]
RewriteCond %{HTTP_Host} !^www\.
RewriteRule .* https://www.%{HTTP_Host}%{REQUEST_URI} [L,R=302]
誰かが答えを持っていることを願って
編集:さらにそれをいじった後、私は問題の一部を見つけました。
たとえば、HTAccessファイルのサイトルートの直下にあるサブフォルダーの1つのサブディレクトリに、このコードがありました
RewriteRule ^jquery_autocomplete.html$ jquery_autocomplete.php [L]
その行を追加するとすぐに、何らかの理由でそのサブディレクトリでHTTPSの強制が停止しますが、再度削除するとすぐにHTTPSが強制されます。
.htaccessを使用しないことを検討してください。これにより、パフォーマンスが向上し、他の.htaccessファイルがconfを上書きすることを回避できます。メインのApache .confファイルに次を追加できます。
<Directory "YOUR WEB DIRECTORY">
AllowOverride None
.....
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://www.example.com%{REQUEST_URI} [L,R=301]
....
</Directory>
これが永続的な変更である場合、302の代わりに301を使用する方が適切であり、302は一時的です
サイトルートの直下にあるサブフォルダーの1つにあるサブディレクトリの1つ、HTAccessファイルに、このコードがありました
そしてそれが問題です。デフォルトでは、mod_rewriteは親フォルダーからディレクティブを継承しません。したがって、サブフォルダー内のmod_rewriteディレクティブは、親フォルダー内のディレクティブ(URLを正規化するディレクティブ)を完全にオーバーライドします。実際、サブフォルダーでRewriteEngine
を有効にするだけで、親ディレクティブをブロックできます。
サブディレクトリの.htaccessファイルで、次の追加を試すことができます。
RewriteOptions Inherit
ただし、親.htaccessファイル内のmod_rewriteディレクティブは、サブフォルダー内のディレクティブの後にafter適用されることに注意する必要があります。 (また、継承されたディレクティブは、サブフォルダーの.htaccessファイルに「仮想的にコピー」されます。したがって、期待どおりに動作しない可能性があります。)
Apache 2.4+を使用している場合、追加のオプションがあります。たとえば、ドキュメントルートの.htaccessファイルで次を指定して、allサブフォルダー.htaccessファイルand親ディレクティブが最初に実行されます。
RewriteOptions InheritDownBefore
参照:
http://httpd.Apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions
1つのルールでHTTPSとwww
を強制するには、次のようなことができます:
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_Host} !^www\.
RewriteRule (.*) https://www.example.com/$1 [R=302,L]
既に持っていたものに似ていますが、%{HTTP_Host
サブドメインが含まれている場合と含まれていない場合があるため、置換にwww.
を使用できません(偶然、閉じ中括弧がありません)。 (%{SERVER_NAME}
を使用できるかもしれませんが、それはサーバーに依存します。)
302
(一時的な)リダイレクトはテストに適していますが、これが正常に機能していることに満足したら301
に変更します。
2つの個別のルールを作成するには、3番目のコードブロックを使用します。