There's an echo in my head

日々のメモ。

middleman で netlify のPretty URLs 用に /_headers を生成する方法

Pretty URL (/blog/recent みたいなやつ)なページを生成してそのまま netlify にアップロードするだけだと、そのページにアクセスしたときに Content-Type: text/plain で返ってきてしまい、HTMLとしてレンダリングしてくれないという課題がある。これには、 /_headers というファイルでページごとのレスポンスヘッダを設定することで対応できる。

# /_headers
/blog/recent
    Content-Type: text/html

ただ、 middleman だと、名前が _ から始まるファイルは partial template として扱われてしまうのと、デフォルトだと拡張子無しのページを生成することができないのとで、この /_headers ファイルを生成するためにひと工夫必要になる。

具体的には次のように proxy を指定して適当なファイル(ここでは source/netlify_headers.txt.erb とする)を /_headers として生成するだけ。

# config.rb
proxy '/_headers', '/netlify_headers.txt', layout: false, ignore: true

ここで書いている ignore: true オプションは、 proxy 先の /netlify_headers.txt は生成しないことを指定している。

そして、 source/netlify_headers.txt.erb には前述したような /_headers に必要な記述をしておく。もしページ全てが対象なら sitemap を使って列挙すると良い。

<%# source/netlify_headers.txt.erb %>
<%- (sitemap.resources.map(&:url) - %w(/_headers)).each do |url| -%>
<%= url %>
  Content-Type: text/html
<%- end -%>

参考

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。