
以下の条件に対して mod_rewrite ルールを適切に構成する方法がわかりません。
- ルートパス(/、例:example.com)のみ、非 www を www に、http を https にリダイレクトします。
- /test.html など、それ以外のものは無視してください。例: example.com/test.html
ディレクトリ ルール内の Apache インクルード ファイルにルールを記述していることに注意してください。
現在私が使用しているものは次のとおりです:
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
これにより、すべての非 www リクエストが www に正しくリダイレクトされますが、HTTP リクエストも許可されます。これは / の場合のみ防止したいものです (例: example.com)。
次に、次のことを試しました。
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^$ https://www.example.com [L,R=301]
これは (どうやら) 機能したようですが、通常のブラウザでは問題なく機能していたにもかかわらず、サードパーティのアップタイム監視サイトからの HTTPS GET リクエストの発行がすべてブロックされてしまったことが判明しました。そのため、私にはアイデアがありません。
答え1
結局のところ、@MrWhite の提案どおり、サードパーティの監視サイトがリダイレクトに正しく従っていないことが原因であることがわかりました。監視パスを編集して HTTPS プロトコル経由で直接チェックし、リダイレクトを回避することでこの問題を解決しました。
書き換えルールは結局正しく、Apache のディレクトリ サーバー ディレクティブに含まれるルート パスに対してのみ使用されました。
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^$ https://www.example.com [L,R=301]
ちなみに、htaccess/mod_rewrite ルールに苦労している人のために、テストに大いに役立った素晴らしいオンライン ツールを紹介します。https://htaccess.madewithlove.be/
皆様のご意見に感謝いたします。大変ありがたく思います。