投稿が半年も抜けちゃいました・・・。いかんですね。皆さまお元気でしたでしょうか?

サイトのドメインを決める際に「www」をつけるかつけないか、少しは考えることがあると思います。今回は、Node.jsで「www」の有り無しで正しくリダイレクトさせる方法をご紹介します。

app.configureの直下に書きます。index.htmlにあたる、app.get ‘/‘以降に書いてしまうと、こちらが先に有効になってしまいますので、app.get群の一番最初に書きましょう。

wwwなしでアクセスがあった時に、wwwありにリダイレクトさせる方法

coffee
1
2
3
4
5
6
7
8
app.get '/*', (req, res, next) ->
  # req.headresの中にwwwが含まれていれば、
  if req.headers.host.match(/^www/) is null
    # wwwをつけた状態でリダイレクトします。
    res.redirect 'http://www.' + req.url
  else
    # それ以外は次へ進みます。
    next()

記述自体はとても簡単です。よくあるWEBサーバーソフトウェアのApacheですと、.htaccsessに書いて、301リダイレクトしますが、Node.jsの場合は、res.redirectで自動的に301を返すようになっています。今度は逆に、wwwありでアクセスがあった場合に、wwwを取ってリダイレクトする方法です。

wwwありでアクセスがあった時に、wwwを取ってリダイレクトさせる方法

coffee
1
2
3
4
5
6
7
8
app.get '/*', (req, res, next) ->
  # req.headresの中にwwwが含まれていれば、
  if req.headers.host.match(/^www/) isnt null
    # wwwを取った状態にリダイレクトします。
    res.redirect 'http://' + req.headers.host.replace(/^www\./, '') + req.url
  else
    # それ以外は次へ進みます。
    next()

正規表現でパターンをマッチさせると簡単ですね。

レンタルサーバーのHerokuで、ドメインなどのリダイレクトも同時にやってしまう方法を、またの機会に紹介します。