以下は.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
にリダイレクトします。