{{tag>manimani.cc nginx}} # サブドメイン "www" へのアクセスをリダイレクトする なんとなく "www" あってもなくても同じページにアクセスできた方がいいよね…… ``` www IN CNAME @ ``` ……とか設定していたんですが、これ google さんは `manimani.cc` と `www.manimani.cc` を別のサイトとして認識するかも知れないとのこと。[googleさん](https://support.google.com/webmasters/answer/44231) ## google Search Console でどうにかする google Search Console で設定入れて回避することもできるみたいですが、どうやらそれをやるためには "s" なし http の tcp:80 も開けないとダメなようで……却下です。((なにか特別な理由でもない限り https だけ開けとけばいいでしょ。イマドキ tcp:80 なんぞ要らん……という趣味。)) ## サーバー側でどうにかする じゃあどうしようか、となった時に、どうやらメイン以外の URL に来たリクエストを 301 リダイレクトを返してメインの URL に誘導するのが手っ取り早く有効らしい。[google さん](https://support.google.com/webmasters/answer/93633) ふむ……nginx でもう一つホスト名ベースのバーチャルサーバー((apache 的にはバーチャル"ホスト"ですね。))を立ててあげれば良さそう。 ``` 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` あたりの設定をいれても良いかもですね。