Nginx можно: проверить, если куки не существует

Я пытаюсь перенаправить пользователя с nginx на другой виртуальный хост, если они не имеют auth cookie в запросе, который они делают. То есть, когда они посещают , если печенье присутствует, то они должны увидеть ; Если они не имеют auth печеньем, они должны увидеть в.

Я прочитал "если есть зло" с nginx, и мне удалось успешно проверить, будут ли пользователи имели печенье. Я сделал это, выполнив:

if ($cookie_auth) {
     redirect 301 https://signup.foo.com;
}
...

Но, конечно, это делать противоположное тому, что я хочу, чтобы это произошло. Я тоже пробовал делать карту, как следующие:

map $cookie_auth $no_auth {
    default 0;
    '' 1;
}

server {
     ...
     if ($no_auth) { return 301 https://signup.foo.com; }
     ...
}

Но это, казалось, чтобы перенаправить все signup.foo.com. Довольно много, суть моего вопроса заключается в том, как использовать ператора в nginx-ов. Что-то вроде , например.

0
2019-09-18 17:25:56
источник
4 ответа

Лямбды может быть?

auto op = add ? (increase ? [](float a, float b) {return a+b;} : [](float a, float b) {return a-b;})
          : (increase ? [](float a, float b) {return a*b;} : [](float a, float b) {return a/b;});
+0
2019-09-18 22:16:52
using F = std::function<float(float, float)>;
auto op = add ? (increase ? F(std::plus<float>()) : F(std::minus<float>()) )
          : (increase ? F(std::multiplies<float>()) : F(std::divides<float>()) );

Вот, один из стандартных функциональных объектов строится. Однако, поскольку все они имеют различные типы, мы должны явно привести их к общему типу - .

+0
2019-09-18 22:16:52

Может быть, короче, пожалуй, более читабельный код может быть интересна

return add ? (increase ? a+b : a-b)
          : (increase ? a*b : a/b);

Если вам нужно хранить вызываемый объект для последующего использования, заверните ее в один лямда

auto fun = [=](T a, T b) { return add ? (increase ? a+b : a-b)
          : (increase ? a*b : a/b); };
+0
2019-09-18 22:16:52

Если только следующие замечания могут быть изменены:

auto op = add ? (increase ? /* plus */ : /* minus */)
              : (increase ? /* times */ : /* divide */);

Вы могли бы использовать лямбда-разлагающаяся, чтобы указатель на функцию с или :

auto op = add ? (increase ? +[](const T& lhs, const T& rhs) { return lhs + rhs }
                          : +[](const T& lhs, const T& rhs) { return lhs - rhs })
              : (increase ? +[](const T& lhs, const T& rhs) { return lhs * rhs }
                          : +[](const T& lhs, const T& rhs) { return lhs / rhs });
+0
2019-09-18 22:16:52

Посмотрите другие вопросы по меткам