url rewrite, nginx lance 404 erreurs, rien dans les loggings d'erreur

ci-dessous réécrire fonctionne bien:

rewrite ^/city/restaurants$ /city/listings/restaurants permanent; 

mais cela ne fonctionne pas

 rewrite ^/city/restaurants$ /city/listings/restaurants last; rewrite ^/city/restaurants$ /city/listings/restaurants break; 

Qu'est-ce que je fais mal?

sous le bloc de server nginx entier

  server { listn 80 default backlog=1024; server_name mydomain.com; client_max_body_size 20M; charset utf-8; keepalive_timeout 50; access_log /var/log/access_log main; error_log /var/log/error_log info; root /var/www/; index index.php index.phtml index.html; autoindex on; location ~ \..*/*\.php$ { return 403; } location ~^/sites/.*/private/{ return 403; } location ~^/sites/.*/files/* { try_files $uri @rewrite; } location ~ (^|/)\. { return 403; } location / { rewrite ^/city/restaurants$ /city/listings/restaurants last; location ~* \.php$ { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_pass 127.0.0.1:9000; #try_files $uri @rewrite; } try_files $uri @rewrite; } location @rewrite { rewrite ^ /index.php; } location ~* \.(?:ico|css|js|gif|jpg|jpeg|png)$ { try_files $uri $uri/; expires 30d; } } 

Tout d'abord, déplacez la key de réécriture hors du bloc de location dans le bloc du server entoure. Cela simplifiera votre logique.

Ensuite, activez la réécriture de la journalisation de debugging pour confirmer si le 404 que vous obtenez provient de l'URL d'origine ou de l'URL réécrit.

Enfin, si la cause racine n'est toujours pas trouvée, activez la journalisation de debugging générale pour Nginx:

 error_log /path/to/log debug;