Nginx редирект

apekoff

Создатель
Регистрация
19 Авг 2008
Сообщения
40
Реакции
1
Привет всем.
Не получается разобраться с регулярками под nginx
есть аналог в htaccess
Код:
RewriteEngine  on
RewriteCond    %{HTTP_REFERER}  (тут|рефы|которых|редиректить)  [NC]
RewriteCond    %{HTTP_USER_AGENT}  !(кроме|этих|юзерагентов|)    [NC]
RewriteRule    (.*)    http://тутссылка    [L,R=302]

мои попытки с nginx
Код:
if ( $http_referer ~*
        "(тут|рефы|которых|редиректить)"
        )
        {
 
        rewrite ^/(.*) http://тутссылка permanent;
 
        }
куда вставить второе условие
 
Используем дополнительную переменную
Код:
set $flag 0;
if ( $http_referer ~* "(тут|рефы|которых|редиректить)")
{
  set $flag 1;
}
if( $http_user_agent ~* "(кроме|этих|юзерагентов|)")
{
  set $flag 0;
}
if( $flag = 1)
{
  rewrite ^/(.*) http://тутссылка permanent;
}

Как видишь, если первое условие выполняется, а второе нет, то флаг будет равен 1 и выполнится код в третьем условии.

UPD: Исправил ошибки в 4 и 8 строчках
 
А если второе условие тоже выполнится ,нужно писать еще одно условие (чтобы не было редиректа )? или просто редиректа не будет? И эту переменную мы сами получается назначили:
set $flag 0;
 
Если второе условие выполнится, то флаг сбросится в ноль и не будет редиректа. И да, переменную мы заранее назначили со значением 0, чтобы если не выполнилось первое условие, не было и редиректа (а кто же ещё присвоит переменной значение 1?)
 
спасибо помогло , только ошибка тут небольшая !

Код:
set $flag 0;
if ( $http_referer ~* "(тут|рефы|которых|редиректить)")
{
  set $flag 1; тут
}
if( $http_user_agent ~* "(кроме|этих|юзерагентов|)")
{
  set $flag 0; тут
}
if( $flag = 1)
{
  rewrite ^/(.*) http://тутссылка permanent;
}
Ну а вообще огромное спасибо !!
И да, переменную мы заранее назначили со значением 0, чтобы если не выполнилось первое условие, не было и редиректа (а кто же ещё присвоит переменной значение 1?)

ну я имел ввиду что под $flag 0 могло быть и $blabla 0
 
Назад
Сверху