Nginx редирект

Тема в разделе "Администрирование серверов", создана пользователем apekoff, 19 мар 2012.

Модераторы: mefish, stooper
  1. apekoff

    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;
     
            }
    
    куда вставить второе условие
     
  2. noxwell

    noxwell Создатель

    Регистр.:
    23 июн 2011
    Сообщения:
    13
    Симпатии:
    9
    Используем дополнительную переменную
    Код:
    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 строчках
     
    apekoff нравится это.
  3. apekoff

    apekoff Создатель

    Регистр.:
    19 авг 2008
    Сообщения:
    40
    Симпатии:
    1
    А если второе условие тоже выполнится ,нужно писать еще одно условие (чтобы не было редиректа )? или просто редиректа не будет? И эту переменную мы сами получается назначили:
    set $flag 0;
     
  4. noxwell

    noxwell Создатель

    Регистр.:
    23 июн 2011
    Сообщения:
    13
    Симпатии:
    9
    Если второе условие выполнится, то флаг сбросится в ноль и не будет редиректа. И да, переменную мы заранее назначили со значением 0, чтобы если не выполнилось первое условие, не было и редиректа (а кто же ещё присвоит переменной значение 1?)
     
  5. apekoff

    apekoff Создатель

    Регистр.:
    19 авг 2008
    Сообщения:
    40
    Симпатии:
    1
    спасибо помогло , только ошибка тут небольшая !

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