ablogで”/blog.html”と”/blog/index.html”の競合への対処#
ablog を使ってブログサイトを構築していたところ、ビルド後の出力で /blog.html
と /blog/index.html
の両方が生成されてしまい、URLの扱いやリンクの挙動で混乱する場面がありました。本記事ではその原因と対処法についてまとめておきます。
問題の発生状況#
以下のような構成で Sphinx + ablog を使用:
blog/index.rst
を作成し、自作のブログトップページを定義conf.py
の設定はblog_path=blog
(デフォルト値)
この状態でビルドすると、以下の2つの HTML ファイルが生成される:
/blog.html
(ablog が自動生成する全記事一覧ページ)/blog/index.html
(自分で作成したblog/index.rst
のビルド結果)
その結果、以下のような衝突が発生:
toctree
のリンク先が/blog
か/blog/index.html
かで揺れるNetlify 上で
/blog
にアクセスすると/blog.html
が優先される
原因と仕様#
ablog はデフォルトで blog_path = "blog"
の設定となっており、
この場合、自動的に /blog.html
を全記事一覧ページとして生成します。
一方で blog/index.rst
を作ると、それは /blog/index.html
になる。
つまり、/blog.html
と /blog/index.html
が**別物として**同時に存在してしまうのが問題。
対処法#
自分の blog/index.rst
を維持したまま、ablog の出力と衝突しないようにするには
conf.py
にて blog_path
の値を変更するのが有効。
たとえば、以下のように設定:
blog_path = "blog/posts"
これにより:
ablog が生成する全記事一覧ページ →
/blog/posts.html
自作の
blog/index.rst
→/blog/index.html
と、役割が分離され、衝突や混乱を回避可能。
補足:Netlify でのURL優先順#
Netlify では /blog
にアクセスした場合、/blog.html
を優先して表示します(静的ファイルベースのルール)。
したがって netlifyのリダイレクト設定を使った誘導という手もできなくはないが、フォルダ構成を正したほうがスマート:
/blog /blog/index.html 200
まとめ#
ablog は
blog_path
の設定により自動出力先が決まるblog/index.rst
を作るならblog_path
を別にするのが安全静的出力では
/blog
が/blog.html
と扱われる点にも注意
記事情報
- 投稿日:
2025-04-02
- 投稿者:
mtakagishi