Disons que j'ai une URL comme celle-ci: www.example.com/a/b/sth
, et j'écris un bloc d'emplacement dans la configuration Nginx:
location ^~ /a/b/(?<myvar>[a-zA-Z]+) {
# use variable $myvar here
if ($myvar = "sth") { ... }
}
J'espère pouvoir utiliser la variable $myvar
capturé à partir de l'URL à l'intérieur le bloc, cependant, Nginx continue de me dire que cette variable n'est pas définie et ne démarre pas:
nginx: [emerg] unknown "myvar" variable
Comme Stefano Fratini l'a correctement souligné dans sa réponse, votre déclaration location
contient une erreur: pour les expressions régulières, vous devez utiliser ~
seul, pas ^~
.
Les captures nommées sont une fonctionnalité de PCRE et leur syntaxe est disponible dans différentes versions. Pour la syntaxe que vous utilisez ?<var>
vous devez avoir au moins PCRE 7.0.
Veuillez consulter les informations détaillées dans documentation officielle Nginx
Vieux fil mais j'ai eu le même problème ...
Je pense que l'erreur n'est pas liée à la version PCRE installée
NGINX n'analyse pas votre expression régulière si votre balise de localisation ne commence pas par ~ Vous devez utiliser quelque chose comme ça
location ~ ^/a/b/(?<myvar>[a-zA-Z]+) {
# use variable $myvar here
if ($myvar = "sth") { ... }
}
^ ~ n'est pas une correspondance regex, il contient le préfixe correspondant le plus long. vous devez utiliser ~ ou ~ * (insensible à la casse) à la place
Non testé, mais la bonne façon de capturer un bloc dans une variable nommée à l'aide de PCRE est (? P). Votre exemple manque donc le P.