サブドメイン "www" へのアクセスをリダイレクトする
なんとなく “www” あってもなくても同じページにアクセスできた方がいいよね……
www IN CNAME @
……とか設定していたんですが、これ google さんは manimani.cc
と www.manimani.cc
を別のサイトとして認識するかも知れないとのこと。googleさん
google Search Console でどうにかする
google Search Console で設定入れて回避することもできるみたいですが、どうやらそれをやるためには “s” なし http の tcp:80 も開けないとダメなようで……却下です。1)
サーバー側でどうにかする
じゃあどうしようか、となった時に、どうやらメイン以外の URL に来たリクエストを 301 リダイレクトを返してメインの URL に誘導するのが手っ取り早く有効らしい。google さん
ふむ……nginx でもう一つホスト名ベースのバーチャルサーバー2)を立ててあげれば良さそう。
http { server { listen 203.143.127.234:443; server_name manimani.cc; root /var/www/localhost/htdocs; ssl on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; ssl_dhparam /path/to/dhparam.pem; ssl_session_timeout 2h; ssl_session_cache shared:SSL443:50m; ssl_session_tickets on; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;'; : :
いまこんな設定が入っているので、server_name
に www.manimani.cc
を設定した server
ディレクティブをもう1つ作ってあげれば良さそう。ほんで、そこにきたアクセスは全部まとめてサブドメインのない manimani.cc
へのリダイレクトを返すようにします。
http { # 追加するサブドメイン付き URL を捌くバーチャルサーバー server { listen 203.143.127.234:443; server_name www.manimani.cc; return 301 $scheme://manimani.cc$request_uri; ssl on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; ssl_dhparam /path/to/dhparam.pem; ssl_session_timeout 2h; ssl_session_cache shared:SSL443:50m; ssl_session_tickets on; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;'; } # もともとあったメイン URL の定義 server { listen 203.143.127.234:443; server_name manimani.cc; root /var/www/localhost/htdocs; : :
server_name www.manimani.cc;
のバーチャルサーバーを作って、return 301 $scheme://manimani.cc$request_uri;
の設定でとにかく問答無用でメインの url に飛ばします。うまく動いてるっぽいです。“www” 付きの url https://www.manimani.cc/wiki/manimani.cc/redirect_subdomain_www にアクセスしても、ちゃんと “www” なしにリダイレクトされます。
あとはリダイレクト専用バーチャルサーバーの方に access_log
error_log
あたりの設定をいれても良いかもですね。