以下は.htaccessでwwwありのURLをなしにするための記述です。
ここで、1行目の(.*)と2行目の(.*)には何が入っているのか調べてみました。
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]. | 改行(\n)を除く任意の文字 |
* | 0回以上 |
1行目: RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
%{HTTP_HOST}: これはリクエストされた URL のホスト部分、つまりドメイン名(例:www.helloharu.comやhelloharu.com)を意味します。^www\.(.*)$:^www\.: ホスト名がwww.で始まることを表しています。(.*):www.の後に続く すべての文字列 をキャプチャします。たとえば、www.example.comの場合、この部分でexample.comをキャプチャします。$: ホスト名の終わりを示します。
- この
(.*)は、www.に続く ドメイン名の部分 をキャプチャする役割を果たします。たとえば、www.helloharu.comに対してこの(.*)はhelloharu.comをキャプチャします。
キャプチャ結果: helloharu.com
キャプチャされた結果は、後の RewriteRule で %1 として参照されます。
2行目: RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
^(.*)$:^: URL パスの先頭を表します(ホスト名の後に続く部分、例:/aboutや/index.php)。(.*): すべての文字列(パス全体)をキャプチャします。これはリクエストされた URL のパス部分を表します。例えば、https://www.helloharu.com/aboutにアクセスした場合、この(.*)は/aboutをキャプチャします。$: URL パスの終わりを示します。
- この
(.*)は、URL のパス部分をキャプチャし、後のリダイレクトで$1として参照されます。
キャプチャ結果: /about(もしくは /index.php や / など)
全体の動作例
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]:- もし
https://www.helloharu.com/aboutにアクセスすると、この行ではhelloharu.comが(.*)でキャプチャされ、%1になります。
- もし
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]:- この行では、URL のパス部分
/aboutがキャプチャされ、$1になります。
- この行では、URL のパス部分
最終的に、https://www.helloharu.com/about から https://helloharu.com/about へリダイレクトされます。
%1:helloharu.com$1:/about
リダイレクト結果: https://helloharu.com/about
このようにして、www. 付きの URL を自動的に非 www にリダイレクトします。
