Как правильно настроить переопределение (rewrite) для перенаправления URL с символом «/» в конце?

Привет всем! <br/> Поделитесь, пожалуйста, как правильно настроить конфигурацию nginx, чтобы все страницы сайта открывались со слешем в конце, при этом исключив админку WordPress. <br/> Сайт на WordPress размещен в директории другого сайта. <br/> Вот часть моей конфигурации: <br/> <pre><code class="nginx">location /blog {
        try_files $uri $uri/ @wordpress;
        rewrite ^(/blog/.*[^/])$  $1/  permanent;
    }
    location @wordpress {
        rewrite /blog /blog/index.php;
    }
    location ^/blog/index.php(/.*)?$ {
        fastcgi_split_path_info ^(/blog/index.php)(/.*)$;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO $fastcgi_path_info;
        include fastcgi_params;
    }</code></pre> <br/> <br/> Я настроил все так, и на внешней стороне всё работает, но в админке страницы перестали открываться...
  • 22 января 2025 г. 9:54
Ответы на вопрос 1
Чтобы настроить правильное переопределение (rewrite) для перенаправления URL с символом «/» в конце в Nginx, и при этом исключить админскую часть WordPress, можно сделать следующее. Ваш исходный код имеет правильную структуру, но может потребовать некоторые уточнения, чтобы избежать проблем с админкой и сделать правильные редиректы.

Вот пример конфигурации, который может решить вашу задачу:

```nginx
location /blog {
    # Исключаем админку WordPress
    location ~ ^/blog/wp-admin {
        # Обрабатываем админку без редиректов
        try_files $uri $uri/ @wordpress;
    }

    # Обрабатываем остальные запросы
    try_files $uri $uri/ @wordpress;

    # Перенаправляем URL без слэша в конце на URL со слэшем
    rewrite ^(/blog/.*[^/])$ $1/ permanent;
}

location @wordpress {
    rewrite /blog /blog/index.php;
}

location ~ ^/blog/index\.php(/.*)?$ {
    fastcgi_split_path_info ^(/blog/index.php)(/.*)$;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO $fastcgi_path_info;
    include fastcgi_params;
}
```

### Объяснение:

1. **Исключение `/wp-admin`:** Внутри блока `location /blog`, добавлен новый блок `location ~ ^/blog/wp-admin`, который разрешает доступ к административной части WordPress без перенаправлений. Это помогает предотвратить проблемы с доступом к админке.

2. **Перенаправление:** Регулярное выражение `rewrite ^(/blog/.*[^/])$ $1/ permanent;` работает как раньше и перенаправляет запросы, которые не оканчиваются слэшем.

3. **Обработка остальных запросов:** Все запросы, не попадающие под `/wp-admin`, будут обработаны с использованием существующих правил. Это гарантирует, что обычные запросы к страницам будут направлены на обработку индекса WordPress.

### Примечание:
После внесения изменений в конфигурацию сервера не забудьте перезагрузить Nginx, чтобы применить изменения:

```bash
sudo systemctl reload nginx
```

Проверьте, что теперь все страницы сайта открываются со слэшем в конце, включая страницы, и что админка WordPress функционирует корректно.
Похожие вопросы