【正規化】.htaccess(.*)の中身は何か?

以下は.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.comhelloharu.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/ など)


全体の動作例

  1. RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]:
    • もし https://www.helloharu.com/about にアクセスすると、この行では helloharu.com(.*) でキャプチャされ、%1 になります。
  2. RewriteRule ^(.*)$ https://%1/$1 [R=301,L]:
    • この行では、URL のパス部分 /about がキャプチャされ、$1 になります。

最終的に、https://www.helloharu.com/about から https://helloharu.com/about へリダイレクトされます。

  • %1: helloharu.com
  • $1: /about

リダイレクト結果: https://helloharu.com/about

このようにして、www. 付きの URL を自動的に非 www にリダイレクトします。