Redirects with Craft and nginx I'm running into a few issues trying to set up 301/302 redirects with Craft and nginx. The legacy site has /contact.php paths which I would like to direct to /info/ but when I visit mysite.com/contact.php it gives me the No input file specified. error.

I tried setting this up with Retour plugin, and inside of nginx files, but they both return No input file since there is no contact.php on my server.

Below is my nginx file for reference:

server {
    listen 80;
    listen 443 ssl http2;
    server_name mysite.com;
    root "/home/vagrant/mysite/public";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/mysite.error.log error;

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }

    location ~ /\.ht {
        deny all;
    }

    ssl_certificate     /etc/nginx/ssl/mysite.crt;
    ssl_certificate_key /etc/nginx/ssl/mysite.key;
}


I know Craft is doing some weird things here to avoid index.php, not sure how it affects my situation though. In addition to mapping /contact.php to /info/, I would also like to make /gallery.php?c=category to /?filter=category

Thanks for your help!
To fix the "No Input File" in your Nginx config, you'll need something like this inside if your php location handler:

    try_files $uri $uri/ /index.php?$query_string;


That will cause it to run the query through Craft (via index.php) if the .php file doesn't exist, which then allows Retour to handle it.

You can see this works by hitting a random .php url on my site: https://nystudio107.com/woof.php

c.f.: https://github.com/nystudio107/nginx-craft/blob/master/sites-available/somedomain.com.conf#L106 &amp; Nginx-Craft