Compare commits

..

2 Commits

Author SHA1 Message Date
jze9
929802978c fix: index.html с no-store, хешированные ассеты кешируются надолго
Браузеры залипали на старом index.html (эвристический кеш без Cache-Control),
из-за чего не подхватывали новый билд. Теперь index.html — no-store, а
ассеты с хешем в имени — immutable на год.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 02:04:32 +05:00
jze9
02a21a8e45 fix: устойчивый разбор category из URL (отрезаем мусор /page/... от CMS)
CMS copp74.ru дописывает в хвост ссылки путь публикации (/page/<uuid>),
из-за чего последний slug ломался. Теперь при чтении URL берём часть
slug'а до первого «/» и убираем дубли — покорёженные ссылки работают.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 01:59:40 +05:00
2 changed files with 16 additions and 4 deletions

View File

@@ -5,16 +5,21 @@ server {
# Named location — отдаёт React SPA без повторной маршрутизации
location @spa {
add_header Cache-Control "no-store, must-revalidate";
try_files /index.html =404;
}
# Корневая страница
# Корневая страница — index.html никогда не кешируем, чтобы всегда грузился
# актуальный билд (ассеты внутри — с хешами в имени)
location = / {
add_header Cache-Control "no-store, must-revalidate";
try_files /index.html =404;
}
# Статические ассеты приложения (JS, CSS, шрифты, картинки)
# Статические ассеты приложения (JS, CSS, шрифты, картинки) — имена с хешем,
# можно кешировать надолго
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot|json|map)$ {
add_header Cache-Control "public, max-age=31536000, immutable";
try_files $uri =404;
}

View File

@@ -30,8 +30,15 @@ export default function NewsFeed() {
const [hasMore, setHasMore] = useState(false)
// Начальное состояние фильтров читаем из URL — ссылка открывает ленту с этими колледжами
const [filters, setFilters] = useState(() => ({
category: (searchParams.get('category') || '').split(',').filter(Boolean),
tag: searchParams.get('tag') || null,
// Чистим slug'и: CMS иногда дописывает свой путь (/page/...) в хвост ссылки —
// берём часть до первого «/» (в слагах слэша нет) и убираем дубли.
category: [...new Set(
(searchParams.get('category') || '')
.split(',')
.map(s => s.split('/')[0].trim())
.filter(Boolean)
)],
tag: (searchParams.get('tag') || '').split('/')[0] || null,
datePreset: searchParams.get('period') || '',
}))