存在しないファイルにアクセスしたらindex.htmlを返す

存在しないファイルにアクセスしたらindex.htmlを返す、というのをnginxとgrunt-contrib-connectで書いた。なにがやりたかったかというとSPAみたいなことを。

nginxの方はテキトーに調べてテキトーに書いた。try_filesはちゃんとファイルパスを書いてあげないと行けないみたいで、ただ/にしたら駄目だった。

index index.html index.htm;と上の方に書いてあるので同じことを書いていてあまり良くないというか。

try_files $uri $uri/ /index.html /index.htm;

ついでに、Gruntを使っていてgrunt-contrib-connectでローカルでも確認できるような作りになっていたので、Gruntでも同じ動作になるようにした。

connect:
  server:
    options:
      base: './public'
      livereload: true
      middleware: (connect, options, middlewares) ->
        fs = require('fs')
        middlewares.push (req, res, next) ->
          fs.createReadStream('./public/index.html').pipe(res)
        middlewares

やっていることはただ単純に他のミドルウェアを通り抜けてきたらindex.htmlをパイプで渡してるだけ。