Задать вопрос
@emellstornn

Nginx+drupal7+landing pages как правильно настроить перенаправление?

Всем привет. Есть такая задача:
порядка 400 однотипных доменов, отличающихся окончанием, например:
examlpe.com
example.net
examples.com
examples.net
Все четыре запроса нужно перенаправить на example.com/?q=example

Текущий вариант конфига:
set $main_host 'example.com';
    if ($host != $main_host) {
        rewrite             ^(.*)$              http://$main_host/?q=example$1     redirect;
        break;
    }

Это работает, но при переходе по example.com, понятное дело, ничего не происходит
если же добавить условие типа
if ($host = $main_host) {
        rewrite             http://$main_host              http://$main_host/?q=example$1     redirect;
        break;
    }

то у меня редиректы начинают крутиться в цикле.
Записи типа
rewrite ^ $scheme://example.com\?q=example break;
 return 301 $scheme://example.com\?q=example$request_uri;

точно так же редиректят по кругу, после чего браузер выдает соответствующую ошибку.

Кроме того, для одного домена типа example это несложно написать, но когда их порядка 400, хотелось бы более автоматизированное решение.
Раньше это все было организовано на apache через htaccess следующими правилами:
RewriteEngine on

RewriteCond %{HTTP_HOST} ^(.*)parts\.com  [NC]
RewriteRule (.*)$ http://%1part.com [L,R=301]

RewriteCond %{HTTP_HOST} ^(.*)parts\.net  [NC]
RewriteRule (.*)$ http://%1part.com [L,R=301]

RewriteCond %{HTTP_HOST} ^(.*)\.net  [NC]
RewriteRule (.*)$ http://%1.com [L,R=301]
RewriteCond %{HTTP_HOST} ^(.*)\.COM [NC] 
RewriteRule ^$ index.php?q=%1 [NC,QSA]


htaccess->nginx конвертер (пробовал 2 штуки) выдают либо полностью нерабочие правила, либо отрывают все до .com
Например, так:
if ($http_host ~ "^(.*)parts.com"){
set $rule_0 1$rule_0;
set $bref_1 $1;
}
if ($rule_0 = "1"){
rewrite /(.*)$ http://$bref_1part.com permanent;
}

if ($http_host ~ "^(.*)parts.net"){
set $rule_2 1$rule_2;
set $bref_1 $1;
}
if ($rule_2 = "1"){
rewrite /(.*)$ http://$bref_1part.com permanent;
}
if ($http_host ~ "^(.*).net"){
set $rule_3 1$rule_3;
set $bref_1 $1;
}
if ($rule_3 = "1"){
rewrite /(.*)$ http://$bref_1.com permanent;
}
if ($http_host ~* "^(.*).COM"){
set $rule_4 1$rule_4;
set $bref_1 $1;
}
if ($rule_4 = "1"){
rewrite ^/$ /index.php?q=$bref_1;
}

Прошу помочь разобраться. Спасибо.
  • Вопрос задан
  • 246 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик расширенный
    14 месяцев
    Далее
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    DevOps для эксплуатации и разработки
    6 месяцев
    Далее
Решения вопроса 1
castomi
@castomi
Серверный администратор - tickets.settin.ru
Не понимаю зачем такая глупость.
server {
    listen       80;
    server_name  .example.*;
    if ($arg !~ q=example) { rewrite ^(.*)$ http://example.com/?q=example$1 redirect; }
}

Читайте документацию, это всё очень элементарно.
https://nginx.ru/ru/docs/http/server_names.html
https://nginx.ru/ru/docs/http/ngx_http_core_module...
https://nginx.ru/ru/docs/http/ngx_http_rewrite_mod...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы