Почему мой сайт по-прежнему генерирует закодированный слаг, даже если SiteSetting.slug_generation_method = none

Несколько дней назад я установил SiteSetting.slug_generation_method в значение encoded, пытаясь запустить канал чата (но не включая плагин чата). Я заметил, что URL выглядит некрасиво в локали на китайском языке, поэтому я вернул SiteSetting.slug_generation_method обратно в none.

Однако сайт по-прежнему генерирует слаг для новых тем (не для всех, но для некоторых). Я не понимаю, в чём проблема. Я пробовал выполнить Topic.update_all(slug: "topic") или Topic.update_all(slug: nil), чтобы обновить слаг, но у некоторых тем слаг всё равно остаётся закодированным названием.

1 лайк

Ещё одна проблема заключается в том, что я не могу открыть тему с закодированным слагом — возникает ошибка ERR_TOO_MANY_REDIRECTS. Такие темы с закодированным слагом создаются после того, как я установил SiteSetting.slug_generation_method в значение none.

В логе видно:

Started GET "/t/%E6%88%91%E4%B9%9F%E8%83%BD%E6%89%BE%E5%88%B0%E5%B1%9E%E4%BA%8E%E6%88%91%E7%9A%84%E9%98%B3%E5%85%89%E5%A4%A7%E7%94%B7%E5%AD%A9%E5%90%97/112562/39" for 10.182.185.76 at 2022-11-23 19:35:09 +0800
  Rendered text template (Duration: 0.0ms | Allocations: 1)
Processing by TopicsController#show as HTML
  Parameters: {"slug"=>"我也能找到属于我的阳光大男孩吗", "topic_id"=>"112562", "post_number"=>"39"}
Redirected to https://my-domain/t/%E8%BF%98%E6%9C%89%E4%B8%8D%E5%88%B040%E5%A4%A9%EF%BC%8C2022%E5%B9%B4%E5%B0%B1%E7%BB%93%E6%9D%9F%E4%BA%86%EF%BC%8C%E8%AF%B7%E7%94%A8%E4%B8%80%E4%B8%AA%E5%AD%97%E6%88%96%E8%80%85%E8%AF%8D%E8%AF%81%E6%9D%A5%E8%AF%84%E4%BB%B7%E5%AE%83%E5%90%A7/112489
Completed 301 Moved Permanently in 176ms (ActiveRecord: 0.0ms | Allocations: 19880)

Я изучил код: возможно, метод slugs_do_not_match возвращает true, поскольку %E6%88%91%E4%B9%9F%E8%83%BD%E6%89%BE%E5%88%B0%E5%B1%9E%E4%BA%8E%E6%88%91%E7%9A%84%E9%98%B3%E5%85%89%E5%A4%A7%E7%94%B7%E5%AD%A9%E5%90%97 не равно 我也能找到属于我的阳光大男孩吗. Это и вызывает редирект.

  def slugs_do_not_match
    if SiteSetting.slug_generation_method != "encoded"
      params[:slug] && @topic_view.topic.slug != params[:slug]
    else
      params[:slug] && CGI.unescape(@topic_view.topic.slug) != params[:slug]
    end
  end

Таким образом, проблема остаётся прежней: почему мой сайт генерирует закодированный слаг, когда SiteSetting.slug_generation_method уже установлен в none?