経験知ロゴ

Nginxで「www」有り、無しのURLを統一する方法

nginx
スマートフォン用ブラウザのSafariなどには、アドレスバーに直接URLを入力すると自動的に「www」を付けてしまうブラウザがあります。

例えば、このブログのURL

keikenchi.com

と入力すると

www.keikenchi.com

にアクセスしてしまうのです。僕のブログでは「www」付きのアクセスの設定をしていなかったので、エラーが表示されていました。
ウェブページにアクセスできません

ユーザビリティやアクセスアップのためにURL周りの間口はしっかりしておいたほうが良いので、Nginxで「www」がある場合、無い場合でもアクセスできるようにする方法を紹介します。

サブドメインの設定

まず、ドメイン管理会社のホームページで「www」付きでのアクセスをできるようにする。

ムームードメインの場合は「ムームードメインでサブドメインを設定する方法」の方法で「www」をサブドメインに設定。

「www」付きURLから「www」を外す

「default.conf」を開く。

$ sudo vi /etc/nginx/conf.d/default.conf

下記コードを通常のサーバ設定の上に追加する。(example.orgを自分のURLにする)

server {
    listen       80;
    server_name  www.example.org;
    return       301 http://example.org$request_uri;
}

追加後はこんな感じになる。

server {
    listen       80;
    server_name  www.example.org;
    return       301 http://example.org$request_uri;
}

server {
    listen       80;
    server_name  example.org;
    …通常のサーバーの設定が続く
}

「www.example.org」でアクセスしてきたら「http://example.org」に301でリダイレクトしてパラメータも渡すという処理を行う。

保存したらサーバを再起動

$ sudo service nginx restart

「www」無しURLに「www」を追加する

先ほどの逆バージョン。変更後はこんな感じ。

server {
    listen       80;
    server_name  example.org;
    return       301 http://www.example.org$request_uri;
}

server {
    listen       80;
    server_name  www.example.org;
    …通常のサーバーの設定が続く
}

保存したらサーバを再起動

$ sudo service nginx restart

「www」有り、無しどちらでもアクセスできるようにする

「www」有り、無しどちらでもアクセスできるようにする設定はこんな感じ。

server {
    listen       80;
    server_name  example.com www.example.com;
    ...通常のサーバーの設定が続く
}

server {
    listen       80 default_server;
    server_name  _;
    return       301 http://example.com$request_uri;
}

保存したらサーバを再起動

$ sudo service nginx restart

正社員でフリーランスな仕事を実現

フリーのエンジニアになって仕事を自由に選びたい!正社員並みの保証が欲しい!

という相反する要望をかなえてくれるのが【midworks】です。

雇われるだけの生活から脱出してみませんか?



おわりに

「www」付きのULRでアクセス出来ないことに気付いたのはWordCamp Tokyo 2014(WordCamp Tokyo 2014 へ行ってきたよレポート)の懇親会で、名刺交換していただいた方に指摘されて気付きました。

名刺交換してすぐにこのiPhoneでブログにアクセスして頂いた所、ページが表示されず、原因もすぐに突き止め教えて頂きました。

普通に生活していたら絶対に気づかないことですので、改めて懇親会に参加したり、他の人に直接ブログを見てもらう大切さを実感しました。

▼役に立ったらシェアをお願いします