Назад | Перейти на главную страницу

Nginx: перенаправить https: //www.domain.tld/target на https: //nocache.domain.tld/destination

У меня есть конфигурация сервера Cloudflare / Nginx (v1.8.0) / Apache с большим количеством кеширования.

Цель состоит в том, чтобы кэшировать основной домен, но разрешить доступ к сайту через поддомен, на котором все кэширование обходится.

Итак, я ищу общий способ перенаправления "https: //www.domain.tld/target"к"https: //nocache.domain.tld/destination"

Простого сопоставления местоположения с request_uri достаточно для варианта домена без www, но если запрос поступает через поддомен www, как это делают многие сайты, он перенаправляется на nocache.www.domain.tld, который не существует.

Я пробовал всевозможные способы удалить www. подстрока, но ничего не работает.

РЕДАКТИРОВАТЬ

Вот мой нерабочий конфиг сервера Nginx:

server {

  listen 80 default_server;

  server_name localhost;

  set $PROXY_DOMAIN_OR_IP $host;

  if ( $request ~* ".*(www\.)(.*)\/target" ) {
     set $host_without_www $2;
     return 302 $scheme://nocache.${host_without_www}\/destination;
  }

Наконец он заработал следующим образом:

location ~* "/target" {
  if ( $host ~* "www\.(.*)" ) {
    return 302 https://nocache.$1/destination;
  }

  return 302 https://nocache.$host/destination;
}

302-е были для тестирования и будут заменены на постоянные перенаправления.

Спасибо всем, кто откликнулся.

Вот блок местоположения, который вы можете использовать для перенаправления

server {
    server_name www.domain.tld;
    location /target {
        rewrite /target(.*)$ /destination$1 last;
        return 301 https://nocache.domain.tld$request_uri;   
    }
}
  • Server_name ограничивает перенаправление на www.domain.tld домен
  • Местоположение соответствует всем URI, начинающимся с / target
  • директива rewrite преобразует / target в / destination и сохраняет все, что появляется после
  • Возврат подталкивает перенаправление на другой домен
  • вы также можете сделать это с помощью прокси-сервера, если не хотите, чтобы пользователь был перенаправлен