striker ac0467290c fix(contact.php): use is_readable() instead of file_exists() for config
When contact-config.php exists but is unreadable by PHP-FPM (e.g. owned by
www-data while pool runs as nginx), file_exists() returns true but
require_once throws a fatal error → 500.

Production was hitting this: contact-config.php was 'www-data:www-data 640'
but the sag24 PHP-FPM pool runs as 'nginx'. Form returned HTTP 500 on every
POST including legitimate ones — contact form effectively dead.

Server side: chown nginx:nginx /opt/www/sag24.ru/contact-config.php (already
applied). This commit makes the script defensive against the same scenario
in the future.
2026-05-06 01:27:12 +03:00

sag24-website

Сайт sag24.ru — IT-аутсорсинг «Сисадмингрупп» (Пушкино, МО).

Стек

  • Next.js 15 + TypeScript + App Router
  • Static export (output: 'export', trailingSlash: true)
  • Tailwind CSS v3 — конфиг: tailwind.config.js (не .ts!)
  • i18n: [lang] сегмент (/ru/..., /en/...)
  • Шрифт: Manrope (next/font/google)

Страницы

/ru/                → Главная
/ru/uslugi/         → Каталог услуг
/ru/uslugi/[slug]/  → 8 страниц услуг
/ru/about/          → О компании
/ru/clients/        → Клиенты
/ru/partners/       → Партнёры
/ru/faq/            → FAQ
/ru/kontakty/       → Контакты
/en/...             → Аналогично

Деплой

# Локально:
git add . && git commit -m "..." && git push

# На сервере (str-u-01.striker.su):
ssh -i ~/.ssh/id_ed25519_hhivp striker@str-u-01.striker.su 'cat <<XEOF | sudo -S bash
Gh_lpx2018!
cd /opt/www/sag24.ru/repo && git pull && npm run deploy
XEOF'

npm run deploy = BUILD_DIR=../public_html next build && node scripts/indexnow.mjs

После деплоя автоматически отправляется уведомление в IndexNow (Yandex + api.indexnow.org).

Локали

src/locales/ru.ts и en.ts — весь текстовый контент.

SEO

  • GA4: G-C9J0D8FFH3
  • Yandex.Metrika: 97525679
  • IndexNow key: 40c65b722891b81d944f2c3fea6cab95
  • BreadcrumbList JSON-LD на всех страницах (src/lib/breadcrumbs.ts)
  • sitemap.xml: 36 URLs
Description
���� sag24.ru � �������������
Readme 499 KiB
Languages
TypeScript 79.6%
JavaScript 11.4%
PHP 8.6%
CSS 0.4%