Задать вопрос
@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;
}

Прошу помочь разобраться. Спасибо.
  • Вопрос задан
  • 236 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 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...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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