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?
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.
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.