URLに日本語を含むトピックは、URLが完全に一致しない場合、リダイレクトされない

コードベースを調査したところ、エラーの原因は比較的単純なようですが、私の仮定を確認させてください。

slug_generation_method というサイト設定があり、このバグをトリガーするには、デフォルトの ascii 値から encoded に変更する必要があります。このサイト設定を変更すると、すべてのスラッグがクリアされ、再生成されます。

理解できていないのは、サイト設定が “encoded” に設定されている場合に、なぜ以下のようなスラッグが生成されるのかということです。

[3] pry(main)> SiteSetting.slug_generation_method
=> "encoded"
[4] pry(main)> Slug.for(t.slug)
=> "キノの旅-home-thread-intermediate-book-club"

私は “encoded” とは以下のようなものを意味すると考えていました。

[5] pry(main)> CGI.escape(Slug.for(t.slug))
=> "%E3%82%AD%E3%83%8E%E3%81%AE%E6%97%85-home-thread-intermediate-book-club"

これはおそらく以下のプルリクエストに由来しているようです。

テーブルからの生のスラッグは、トピックのスラッグが一致しない場合に 301 応答の Location ヘッダーで返されますが、そこには有効な URL を返すべきだと私は考えます。

「いいね!」 9