delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

Djangoで末尾スラッシュなしのURLがリダイレクトされる事象について(APPEND_SLASHの設定)

概要

Djangoのアプリケーションでは、末尾にスラッシュがないURLでアクセスするとスラッシュ有りのURLに301でリダイレクトされるという事象がある。

これはsettings.pyのAPPEND_SLASHという設定値がデフォルトでTrueになっていることに依る。
docs.djangoproject.com

リダイレクトさせたくなければ、settings.pyでAPPEND_SLASH = Falseに設定するとリダイレクトされなくなる。

困ること

上記の仕様を把握していれば問題ないが、知らないと以下のようなケースではまる可能性がある。

  1. formでPOSTする際に、actionのURLをDjangoの逆引き機能を使わずに直書きしており、かつ末尾にスラッシュを付けないURLを書いた場合にGETでリダイレクトされてしまい、意図した挙動にならない。
  2. ロードバランサーなどからHealthcheckする際のURLに、末尾にスラッシュを付けないURLを設定してしまい、301が返ってきて、Healthcheckが通らない。

背景の考察

issueレベルでの根拠は見つけられなかったが、想像するにDjangoがリリースされたのは2005年なので、その頃は末尾にスラッシュ有りと無しのURLが混在していると、SEOの評価が分散してしまうという問題があったはずである。

それで、Djangoを使う側でその問題を意識しなくてよいように、デフォルトでTrueにしてくれているのではないか?

私の意見

メジャーなサイトをいくつかみてみたが、今日ではリダイレクトしない方が主流のようだし、SEOの評価が分散するという話も聞かなくなった気がする。

なので、APPEND_SLASH = Falseにしてもデメリットは特にないと思うので、Falseにしてしまってもよいと思う。