IIS à la migration de nginx: “inattendu” {“` erroné sur \ d {^ anum ^, ^ anum ^} entrées dans le fichier de carte

J’ai été chargé de migrer une application PHP exécutée dans azuree / iis dans la combinaison nginx + fpm sur une machine GNU + Linux.

Le web.config contient:

        

Suivez ensuite les instructions affichées dans https://serverfault.com/questions/441235/maintaining-redirects-in-nginx-from-an-external-source#441517 J’ai créé le fichier map suivant nommé rewrites.map :

 ^power_ranger/(\d{4,9})$ /power_ranger.php?ranger=$2 

Et sur la configuration de vhost je mets ce qui suit:

 map $uri $new { include /home/user/powerangerApp/rewrites.map; } if ($new) { rewrite ^ $new redirect; } server { listen 80 default_server; listen [::]:80 default_server; root /home/user/powerangerApp; index index.php; server_name _; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; } } 

Ensuite, lorsque j’essaye de recharger le nginx, j’obtiens l’erreur suivante:

nginx: [emerg] inattendu “{” dans /home/user/powerangerApp/rewrites.map:1

Donc, à mon avis, le nginx ne peut pas mapper pcre regex. Alors, comment puis-je faire nginx pour le faire?

Edit 1:

Comme on le voit dans https://serverfault.com/questions/482372/nginx-httpmapmodule-regex-variables#482391 :

J’ai essayé de changer la regex avec:

 ?P^power_ranger/(\d{4,9})$ /power_ranger.php?ranger=$2 

Et toujours la même erreur.

Modifier 2

Jusqu’à présent, j’ai compris que j’avais besoin d’une condition if pour ma configuration nginx:

  if ( $url ~* "^power_ranger/(\d{4,9})$"){ rewrite ^ /power_ranger.php?ranger=$2 } 

Mais j’ai une erreur:

directive inconnue ranger = $ 2 dans /etc/nginx/nginx.conf:^some_number ^

Est-ce que vous savez comment résoudre ce problème?

La regex devrait être changée en:

 ~\/power_ranger\/(\d{4,9})$ /power_ranger.php?ranger=$1; 

Comme vous pouvez le voir, il existe des erreurs de syntaxe.

Le nginx.conf devrait également être:

 map $uri $new { include /home/user/powerangerApp/rewrites.map; } server { listen 80 default_server; listen [::]:80 default_server; root /home/user/powerangerApp; index index.php; server_name _; location / { # On way too many rewrite rules you may avoit the line above try_files $uri $uri/ =404; if ($new) { rewrite ^ $new redirect redirect; } } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; } } 

Gardez à l’esprit que la redirection sur la réécriture peut s’avérer être un moyen de sauver le travail.