После последнего обновления постоянная ссылка на категорию перестала работать, а ссылки на темы функционируют нормально.
Например: category/11562 перенаправляет на c/11562, что неверно; правильно настроенное перенаправление должно вести на c/general/4 или c/4.
Может ли кто-нибудь помочь решить эту проблему?
Вы создали постоянную ссылку для категории/11562, которая раньше перенаправляла на раздел «Общее», но теперь она не работает?
Из какой ветки обновлений это?
Верно, раньше всё работало отлично. Затем я обновился до:
<meta name="generator" content="Discourse 3.3.0.beta1-dev - https://github.com/discourse/discourse version 0bb492c6b6b79389a12b277b9d25b99e75f2625d">
Полностью очистил базу данных, чтобы импортировать данные другого форума с нуля, и теперь это не работает.
Я думаю, что проблема именно в этом, потому что я не могу воспроизвести это на тестах, которые были пройдены сегодня утром.
Посмотрите, пожалуйста, есть ли пермалинк в вашей базе данных и указывает ли он всё ещё в нужное место?
Ваш постоянная ссылка находится не по адресу /category/11562, а по адресу /forum/category/11562.
Мое предположение заключается в том, что в процессе настройки вы потеряли нормализацию постоянных ссылок.
Я не понимаю: если я проверяю ответ на https://preview.vaadin.com/forum/category/11562,
я получаю 302 с Location:
https://preview.vaadin.com/forum/c/11562
В то время как для тем, например:
https://preview.vaadin.com/forum/thread/851770
я получаю 301 с Location:
https://preview.vaadin.com/forum/t/tabsheet-tabs-not-displaying-properly-in-ie8-after-upgrade-to-6-7-1/173931
Я ожидаю, что Discourse будет обрабатывать оба случая одинаково, и, как вы видите, в обоих случаях сохраняется сегмент /forum/.
Так что вы не упомянули тот факт, что весь ваш форум установлен в подпапке.
Я копнул немного глубже и не понимаю, как это вообще могло работать, поскольку category/ всегда вызывает маршрут categories#redirect, и это не менялось недавно.
get "category/*path" => "categories#redirect"
РЕДАКТИРОВАНИЕ: пост ниже показывает, что раньше это работало
Да. Я даже не могу представить, как постоянные ссылки и permalink_normalizations будут работать при установке в подпапке.
И это всегда была установка в подпапке?
И ничего другого не изменилось, когда вы снова запустили скрипт импорта?
Похоже, что наиболее вероятно, что в вашем скрипте есть какая-то разница.
Подождите. https://meta.discourse.org/category/67 перенаправляет на Announcements - Discourse Meta, так что… нет, но есть спецификация, показывающая, что постоянные ссылки переопределяют это перенаправление /category, и ей уже 4–5 лет.
Поэтому я думаю, что следующим шагом я бы вручную создал несколько перенаправлений категорий, чтобы понять, что происходит (например, /category/mycategory или что-то ещё, где даже нет цифр).
Хорошая находка, @pfaffman, этот тест означает, что это действительно должно было сработать.
Вау, я даже не знал, что это возможно!
Да, это довольно удобно, см. Serve Discourse from a subfolder (path prefix) instead of a subdomain
Спасибо за все ваши ответы!
Интересно, что мы выяснили: постоянные ссылки для категорий работают из подпапки только в том случае, если в исходном URL нет пути /category/, как упоминал @pfaffman в своем ответе. Например, /forum/category_foo/123 корректно перенаправляется в целевую общую категорию.
Discourse перехватывает /category/ и заменяет его на /c/.
Следовательно, это можно решить очень просто:
добавить постоянную ссылку с /c/11562, которая является перенаправлением со старого category/11562 на категорию General /c/4.
И вы были правы: первая установка была без подпапки, вторая — с подпапкой, а это уже третья. Мы протестировали, и я считаю, что первые два раза всё работало. Единственное, что изменилось между второй и третьей установкой, — это то, что между первой и второй мы не очищали базу данных, а третья была чистой установкой с новой базой данных вне Docker (помимо обновления до Discourse v3). Поэтому я подозреваю, что что-то изменилось в бета-версии Discourse v3. Иначе зачем бы это когда-либо работало, даже без подпапки?
Вот ваш ответ
Если я правильно понял, вы имеете в виду, что Discourse применяет перенаправление с /category/ на /c/ только в том случае, если в маршруте есть сегмент.
Тем не менее, если взять ваш форум в качестве примера: https://meta.discourse.org/ и перейти по адресу https://meta.discourse.org/category/1, вас перенаправит на https://meta.discourse.org/c/bug/1.
То же самое мы наблюдаем в нашей установке. Было бы невозможно, чтобы ваш сайт перенаправлял с /category/#старый_номер на /c/#реальная_категория; вы всегда оказывались бы на /c/#старый_номер.

