# Редиректы в nginx

Часть перенаправлений решение сделать не может: они должны сработать раньше, чем запрос дойдёт до сайта. Это склейка домена с `www` и без, удаление `index.php` из адреса, приведение адресов к единому виду. Такие правила прописываются в конфигурации nginx.


:::info
**Ошибка в конфигурации nginx кладёт сайт целиком.** Перед правками сделайте копию файла, а после изменений обязательно проверьте конфигурацию командой `nginx -t` — она покажет ошибку до перезапуска.

:::

## Какие файлы править

Подключитесь к серверу по SSH или sFTP (WinSCP, FileZilla) и откройте папку `/etc/nginx/bx/site_avaliable`.

Если на машине один сайт, файлы называются `s1.conf` (для HTTP) и `ssl.s1.conf` (для HTTPS). Если сайтов несколько, в названии будет домен: `bx_ext_example.com.conf` и `bx_ext_ssl_example.com.conf`.

Правьте оба файла — и HTTP, и HTTPS.

## Правила внутри блока server

Эти правила добавляются после строки `server_name_in_redirect off;`.

**Убрать** `**index.php**` **из адреса:**

```nginx
if ($request_uri ~ "^(.*)index\.(?:php|html)") {
    return 301 $1;
}
```

**Добавить слеш в конце адреса:**

```nginx
if ($request_uri !~* "/api/.*") {
    rewrite ^([^.]*[^/])$ $1/ permanent;
}
```

Исключение для `/api/` обязательно: через этот адрес работает обмен клиентской части с сервером, и добавленный слеш его сломает.

**Убрать двойной слеш:**

```nginx
if ($request_uri ~ "^[^?]*?//") {
    rewrite "^" $scheme://$host$uri permanent;
}
```

## Склейка www и без www

Для этого нужен отдельный блок `server`, и добавляется он в начало файла.

Для HTTPS:

```nginx
server {
    listen 443 ssl http2;

    server_name www.example.ru;
    return 301 https://example.ru$request_uri;

    # CERTIFICATE ANSIBLE MANAGED BLOCK
    include bx/conf/ssl_options.conf;
    ssl_certificate /fullchain.pem;
    ssl_certificate_key /privkey.pem;
    ssl_trusted_certificate /chain.pem;
    # CERTIFICATE ANSIBLE MANAGED BLOCK
}
```

Блок с сертификатом скопируйте из основного блока `server` того же файла — он ближе к концу.

Для HTTP:

```nginx
server {
    listen 80;

    server_name www.example.ru;
    return 301 https://example.ru$request_uri;
}
```

Здесь `example.ru` — ваш домен. После этого удалите домен с `www` из строки `server_name` основного блока, если он там есть, — иначе запрос до нового блока не дойдёт.

## Применить изменения

Проверьте конфигурацию и перезапустите nginx:

```bash
nginx -t
systemctl restart nginx
```

`nginx -t` должен ответить `syntax is ok` и `test is successful`. Если вместо этого выводится ошибка с номером строки — исправьте её и проверьте снова; перезапускать nginx со сломанным конфигом нельзя.

## Проверка

Откройте в браузере адрес с `www`, адрес с `index.php` и адрес без слеша на конце — все три должны перебросить на правильный вид. Заодно убедитесь, что обычные страницы каталога и оформление заказа продолжают работать.

Правила для отдельных страниц удобнее делать не здесь, а в админке: [Редиректы](/s/marketpro/doc/redirekty-9aa1p5i3tG).

---

**Documents**

- [Установка решения](https://docs.astdesign.ru/s/marketpro/doc/ustanovka-resheniya-Z8Q6r79liU)
- [FAQ перед покупкой](https://docs.astdesign.ru/s/marketpro/doc/faq-pered-pokupkoj-HPgKP7mWDT)
- [Общая настройка](https://docs.astdesign.ru/s/marketpro/doc/obshaya-nastrojka-Io6HZQaGXf)
- [Шаблон](https://docs.astdesign.ru/s/marketpro/doc/shablon-ylLAFZV3o8)
- [Главная страница](https://docs.astdesign.ru/s/marketpro/doc/glavnaya-stranica-7PwYozaVVo)
- [Магазины (склады)](https://docs.astdesign.ru/s/marketpro/doc/magaziny-sklady-7rEEZJrA45)
- [Каталог](https://docs.astdesign.ru/s/marketpro/doc/katalog-FpnYzZr900)
- [Поиск](https://docs.astdesign.ru/s/marketpro/doc/poisk-xsDdFVh5h0)
- [Текстовые страницы](https://docs.astdesign.ru/s/marketpro/doc/tekstovye-stranicy-jVtNXZv3T5)
- [Реклама и маркетинг](https://docs.astdesign.ru/s/marketpro/doc/reklama-i-marketing-iZkaCoxr5b)
- [Региональность](https://docs.astdesign.ru/s/marketpro/doc/regionalnost-bCuM9AOBNO)
- [Корзина](https://docs.astdesign.ru/s/marketpro/doc/korzina-Mh27pZA7v9)
- [Оформление заказа](https://docs.astdesign.ru/s/marketpro/doc/oformlenie-zakaza-VyvQjOQxZo)
- [Авторизация](https://docs.astdesign.ru/s/marketpro/doc/avtorizaciya-5HwEb1oDJG)
- [SEO и аналитика](https://docs.astdesign.ru/s/marketpro/doc/seo-i-analitika-d1Hw6c4YAM)
- [Уведомления](https://docs.astdesign.ru/s/marketpro/doc/uvedomleniya-SKDyjYg14J)
- [Мобильное приложение](https://docs.astdesign.ru/s/marketpro/doc/mobilnoe-prilozhenie-F5E0hT7TnN)
- [Обновление решения](https://docs.astdesign.ru/s/marketpro/doc/obnovlenie-resheniya-RRRgtxV5uH)
- [Для разработчика](https://docs.astdesign.ru/s/marketpro/doc/dlya-razrabotchika-WJePeJCmpy)
- [Интеграции](https://docs.astdesign.ru/s/marketpro/doc/integracii-D3DqjYOZYm)
- [Что делать, если что-то не работает](https://docs.astdesign.ru/s/marketpro/doc/chto-delat-esli-chto-to-ne-rabotaet-Q8L8sTVJF8)