すべてのリクエストをhttpsとwww以外に1回のジャンプでリダイレクトするにはどうすればよいですか?
メイン/ホームページと他のサブページのすべてのリクエストを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
このルールは、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} !on
:HTTPS
オンになっていない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
。