Как правильно сделать редирект для httputil.ReverseProxy?

Чтобы создать редирект с использованием пакета httputil.ReverseProxy в Go, вам понадобится настроить объект ReverseProxy с функцией обратного вызова (Director), которая будет обрабатывать запросы и изменять их параметры перед отправкой на конечный сервер.

Вот пример кода, который демонстрирует, как правильно сделать редирект для httputil.ReverseProxy:

package main

import (
    "log"
    "net/http"
    "net/http/httputil"
    "net/url"
)

func main() {
    // Целевой URL, на который будет делаться редирект
    targetURL := "http://example.com"

    // Инициализация объекта `url.URL` с целевым URL
    target, err := url.Parse(targetURL)
    if err != nil {
        log.Fatal(err)
    }

    // Создание объекта `httputil.ReverseProxy` с настроенными параметрами
    proxy := httputil.NewSingleHostReverseProxy(target)

    // Настройка функции обратного вызова (Director),
    // которая будет обрабатывать запросы и изменять их параметры перед отправкой на целевой сервер
    proxy.Director = func(req *http.Request) {
        // Меняем параметры запроса
        req.URL.Scheme = target.Scheme
        req.URL.Host = target.Host
        req.Host = target.Host
    }

    // Создание HTTP-обработчика для прослушивания входящих запросов
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        // Проксируем запрос на целевой сервер
        proxy.ServeHTTP(w, r)
    })

    // Запуск HTTP-сервера
    log.Println("Server started on http://localhost:8080")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatal(err)
    }
}

В этом примере мы инициализируем объект httputil.ReverseProxy с целевым URL, используя функцию NewSingleHostReverseProxy. Затем мы настраиваем функцию обратного вызова (Director), которая будет менять параметры запроса перед его отправкой на целевой сервер. В данном случае мы изменяем схему, хост и заголовок Host запроса на соответствующие значения целевого URL.

Затем мы создаем HTTP-обработчик, который будет проксировать запросы на целевой сервер, используя метод ServeHTTP объекта httputil.ReverseProxy. Наконец, мы запускаем HTTP-сервер, который будет прослушивать входящие запросы на порту 8080.

После запуска сервера вы сможете получить доступ к вашему локальному серверу по адресу http://localhost:8080, и он будет автоматически перенаправлять все запросы на URL http://example.com.