すべてのリクエストをhttpsとwww以外に1回のジャンプでリダイレクトするにはどうすればよいですか?

Dec 18 2019

メイン/ホームページと他のサブページのすべてのリクエストをhttpsとwww以外に1回のジャンプでリダイレクトしたいと思います。私は次のhtaccessを使用しています。ソース

RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^mytesting\.com$ [OR] RewriteCond %{HTTP_HOST} ^www\.mytesting\.com$
RewriteRule .* https://www.mytesting.com%{REQUEST_URI} [R=301,L]

しかし、私は次のリダイレクトを取得しました

私はこのようにしたい:

http://mytesting.com          > https://mytesting.com
http://www.mytesting.com      > https://mytesting.com
http://mytesting.com/faq      > https://mytesting.com/faq
https://mytesting.com         > https://mytesting.com
http://www.mytesting.com      > https://mytesting.com
http://www.mytesting.com/faq  > https://mytesting.com/faq
https://mytesting.com/faq     > https://mytesting.com/faq

回答

2 anubhava Dec 18 2019 at 21:41

このルールは、1つのルールの両方のリダイレクトに使用できます。

RewriteCond %{HTTP_HOST} ^www\. [NC,OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE]

このルールの説明は次のとおりです。

  • RewriteCond %{HTTP_HOST} ^www\. [NC,OR]:でHOST_NAME始まる場合www.
  • [NC,OR]:ケースの一致とOR次の条件を無視します
  • RewriteCond %{HTTPS} !onHTTPSオンになっていない
  • RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]www.ここではオプションの一致であるため、この条件は常に一致します。キャプチャグループ#1のパターンを使用してHTTP_HOST開始せずにの部分文字列をキャプチャするために使用されます(後で後で参照されます)。これは非キャプチャグループであることに注意してください。www.(.+)%1(?:..)
  • RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE]^常に一致します。このルールはコードでリダイレクトさhttps://%1%{REQUEST_URI}R=301ます。上記のように、%1からのキャプチャグループ#1の後方参照はどこにありますかRewriteCond