投稿が半年も抜けちゃいました・・・。いかんですね。皆さまお元気でしたでしょうか?
サイトのドメインを決める際に「www」をつけるかつけないか、少しは考えることがあると思います。今回は、Node.jsで「www」の有り無しで正しくリダイレクトさせる方法をご紹介します。
app.configureの直下に書きます。index.htmlにあたる、app.get ‘/’以降に書いてしまうと、こちらが先に有効になってしまいますので、app.get群の一番最初に書きましょう。
wwwなしでアクセスがあった時に、wwwありにリダイレクトさせる方法
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を取ってリダイレクトさせる方法
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で、ドメインなどのリダイレクトも同時にやってしまう方法を、またの機会に紹介します。