Nginx - de plusieurs instructions if imbriquées

Ce que je veux faire:

  • Vérifier si la demande vient de Facebook
  • Vérifier si l'URL est comme domain.com/2
  • Si les conditions susmentionnées sont remplies - afficher le contenu de /api/content/article/$1?social=1
  • Si les conditions ci-dessus sont des faux - show "de la page normale"

C'est un single page app. Avant mes modifications de configuration ressemblait à ça (et ça a fonctionné):

location /{
    root /home/eshlox/projects/XXX/project/project/assets/dist;
    try_files $uri $uri//index.html =404;
}

J'ai essayé de l'utiliser si les déclarations:

location /{
    set $social 1;
    if ($http_user_agent ~* "facebookexternalhit") {
        set $social UA; 
    }       
    if ($uri ~* "^/(\d+)$") {
        set $social "${social}URL";
    }       
    if ($social = UAURL) {
        rewrite ^/(\d+)$ /api/content/item/$1?social=1;
    }

    root /home/eshlox/projects/XXX/project/project/assets/dist;
    try_files $uri $uri//index.html =404;
}

Avec cette configuration, tout fonctionne comme je m'y attendais seulement si les deux conditions sont vraies ou fausses.
Si l'une des conditions est vraie et que la seconde est fausse (ou vice-versa), nginx renvoie toujours le statut 404.

J'ai trouvé "IfIsEvil" nginx sur le site, j'ai essayé d'utiliser la cartographie (puis-je utiliser la cartographie dans ce cas?) mais je ne peux pas résoudre ce problème.

Des idées?

Meilleures salutations.

InformationsquelleAutor eshlox | 2014-03-23