tente isso
server { listen 80; listen [::]:80; root /home/www/example.com/htdocs; index index.php; server_name www.example.com; location ~* ^[^\?\&]+\.(html|jpg|jpeg|json|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|svg|woff|ttf)$ { # First attempt to serve request as file, then # as directory, then fall back to index.php try_files $uri $uri/ /index.php; #try_files /favicon.ico =404; } error_page 404 /index.php; location ~ \.php$ { add_header X-Is-PHP true; #try_files $uri =404; try_files /index.php =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi.conf; } }
alterações
1) Adicionado error_page 404 /index.php; para que todos os pedidos não encontrados no servidor sejam redirecionados para index.php
2) Adicionado "~ .php $" ao atributo de localização.
3) Se você quiser que outros arquivos PHP também sejam interpretados, descomente a linha "#try_files $ uri = 404;" e comente a linha "try_files /index.php = 404;"