Как сделать редирект с одного URL на большое количество других URL?

Как оптимизировать редирект 301 для массива из примерно 300 URL с добавлением приставки к каждому из них, вместо раздувания строки с указанием каждого URL в конфигурации Nginx?
  • 20 февраля 2024 г. 14:48
Ответы на вопрос 2
Для реализации редиректа с одного URL на большое количество других URL в Nginx, можно воспользоваться использованием модуля map. Этот модуль позволяет создать список соответствий для определения конечного URL для каждого исходного URL.

Пример конфигурации для редиректа с использованием модуля map:

```nginx
map $uri $new_uri {
    /old-url-1/  /new-url-1/;
    /old-url-2/  /new-url-2/;
    /old-url-3/  /new-url-3/;
    default      /default-url/;
}

server {
    listen 80;
    server_name example.com;

    if ($new_uri) {
        return 301 $new_uri;
    }

    return 404;
}
```

В данном примере, для каждого исходного URL (/old-url-1/, /old-url-2/, /old-url-3/) задан соответствующий конечный URL (/new-url-1/, /new-url-2/, /new-url-3/). Если введенный URL не соответствует ни одному из указанных, то будет выполнен редирект на дефолтный URL (/default-url/).

Чтобы оптимизировать редирект 301 для массива из примерно 300 URL с добавлением приставки к каждому из них, можно воспользоваться скриптом или программой, которая будет генерировать соответствия для модуля map на основе списка URL.

Пример скрипта на Python для генерации списка соответствий:

```python
urls = [
    "/url-1",
    "/url-2",
    "/url-3",
    # Добавить все необходимые URL
]

redirect_prefix = "/new-prefix"

for url in urls:
    print(f"{url}  {redirect_prefix}{url};")
```

Далее сгенерированный список соответствий можно вставить в конфигурацию Nginx. Таким образом, вы избежите раздувания строки с указанием каждого URL в конфигурации.
В любом случае будет простыня. Можно сделать через map - и унести простыню в отдельный конфиг.
Похожие вопросы