Тема с японским в URL не перенаправляет, если URL не совпадает точно

На community.wanikani.com ссылки на темы, содержащие японские символы в полном URL, перестали открываться в новой вкладке или при копировании и вставке ссылки. Переход по ссылке в той же вкладке по-прежнему работает.

Например, открытие этой ссылки в новой вкладке должно перенаправлять на

キノの旅 Home Thread (Intermediate Book Club) - Book Clubs - WaniKani Community

Однако вместо этого происходит попытка перехода по адресу

キノの旅 Home Thread (Intermediate Book Club) - Book Clubs - WaniKani Community

который не загружается.

Если ссылка совпадает в точности, всё работает корректно. Однако, конечно, при переименовании тем это часто не так.

Я также попытался воспроизвести проблему на try.discourse.org, но в этой установке японские символы никогда не добавляются в URL, даже если они присутствуют в заголовке темы. Я не уверен, почему это происходит, но без этого я не могу продемонстрировать ошибку там.

2 лайка

Обе ссылки ведут на тему 34890. Обе загружаются у меня нормально в Firefox. В чём проблема?

3 лайка

вздыхает Похоже, это ещё одна ошибка Chrome. У меня всё работает нормально и в Firefox, и в Edge. Странно, что в режиме инкогнито всё срабатывает с первого раза, но затем при повторной попытке возникает ошибка. То же самое происходит после очистки кэша и файлов cookie сайта и перезагрузки компьютера.

Chrome сообщает, что ошибка связана с превышением количества перенаправлений.


Не могли бы вы проверить в Chrome, чтобы подтвердить, является ли это общей проблемой именно в этом браузере, а не только у меня? Просто убедитесь, что вы пытаетесь открыть страницу несколько раз, так как первый раз всё работает нормально. Благодарю за помощь!

3 лайка

Я могу воспроизвести это в Chrome на мобильном устройстве. :bug:

5 лайков

Спасибо. Думаю, я сообщу об этом в Google.

1 лайк

На моем телефоне Android в Chrome вторая ссылка перенаправляет бесконечно.

1 лайк

Всё ещё с Chrome? Просто хочу убедиться перед тем, как сообщить об этом им. Предполагаю, что в последнее время в Discourse ничего не менялось, связанное с этим? (В любом случае, это, скорее всего, всё ещё проблема Chrome, так как она возникает только там, даже если в Discourse что-то и изменилось.)

3 лайка

Подождите немного, это может быть проблема с Discourse. Даже баг в сервис-воркере.

5 лайков

Хорошо, спасибо за обновление.

1 лайк

Есть ли какие-то новости по этому вопросу?

Это потребует времени, чтобы разобраться, задача уже назначена, поэтому она не останется без внимания.

7 лайков

Я не ожидаю найти какое-либо решение или обходной путь. Нам просто нужно подождать, пока это исправят.

Вы всё ещё видите эту проблему? Похоже, она уже исправлена, если только я на этот раз не делаю что-то иначе.

1 лайк

Так нет же. Сегодня всё снова началось. Не понимаю, как это вообще ненадолго исправилось.


Раз это займёт время, я готов пока использовать обходные пути. В первом посте я упоминал, что на try (и я проверил это также здесь, на meta) японские символы вообще не добавляются в URL, что фактически обходит эту проблему. Это настройка сайта или категории, о которой я могу поговорить с администратором своего сайта? Есть ли какие-то другие предложения по обходу проблемы, кроме этого?

Когда я ввожу URL с арабским заголовком в браузере, например:

https://forums.coretabs.net/t/2456

происходит бесконечное перенаправление (и, похоже, сгенерированная ссылка неверна; вероятно, это связано с кодировкой).

Вместо этого должно происходить перенаправление на:

https://forums.coretabs.net/t/ماذا-يجب-ان-نتعلم-في-javascript-؟/2456

Почему я не делюсь ссылками с их заголовками?

Из-за плохой поддержки арабского языка в Twitter и Facebook:

  • Эта ошибка отсутствовала до последних обновлений (в последний раз я пробовал делиться ссылкой примерно две недели назад, и всё работало отлично).
3 лайка

Я изучил наш код, и похоже, что ошибка довольно проста, но я хотел бы проверить свои предположения.

У нас есть настройка сайта с именем 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"

Это, по-видимому, связано с

Необработанный слайг из таблицы возвращается в заголовке Location ответа 301, когда слайг темы не совпадает, и, на мой взгляд, мы должны возвращать там корректный URL.

9 лайков

Да, нам стоит доработать метод генерации слага для encoded, чтобы он меньше полагался на магию браузера.

8 лайков

То есть вы имеете в виду, что сама URL-адрес будет отображать закодированную версию? Или просто то, что редирект внутренне обработает это, используя закодированную версию? В любом случае, было бы здорово, чтобы это «просто работало» и не зависело от особенностей браузеров.

1 лайк

Здравствуйте,

Этот вопрос уже решён?
Поскольку у меня всё ещё сохраняется эта проблема, о которой я писал в созданной мной теме по этому поводу.

1 лайк

Нет, что подтверждается открытой темой в категории bug здесь :sweat_smile:

@sam, я снова посмотрел на это сегодня, и есть два пути решения:

  1. Хранить фактически кодированный слайг в колонке slug, когда настройка генерации слайгов установлена в значение encoded. Выполнить миграцию для очистки всех текущих слайгов, использующих кодированные слайги, чтобы они со временем корректно пересоздавались.

  2. Оставить текущий UTF-8 слайг и исправлять его на лету при отправке в заголовке для 301-редиректа.

На мой взгляд, вариант 1 «более правильный», и он затруднит передачу «сырого» слайга клиенту. Однако простого исправления генератора слайгов оказалось недостаточно: браузер получает кодированный URL при 301-редиректе, но декодирует его для следующего запроса, из-за чего наше сравнение слайгов не проходит и происходит повторный редирект. Это означает, что мне также придётся исправить метод сравнения слайгов в контроллере тем, а возможно, и в других местах.

Стоит ли мне продолжать двигаться по этому пути?

6 лайков