Wie leite ich alte PHP-Skripte in der NGINX-Konfiguration auf eine neue HTTPS-Site um?

Wie leite ich alte PHP-Skripte in der NGINX-Konfiguration auf eine neue HTTPS-Site um?

Ich habe ein Problem. Ich versuche, alle PHP-Skripte bis auf eines in meiner NGINX-Konfiguration für meine HTTP-Domänenkonfiguration abzufangen:

Ich habe eine allgemeine Regel für alle PHP-Dateien

    location ~ \.php$ {

    include fastcgi_params;

    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

    # With php5-fpm:
    fastcgi_pass unix:/var/run/php7.4-fpm.$user.sock;
    #fastcgi_pass php7-fpm-sock;

    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    fastcgi_read_timeout 600;
}

Ich muss jedoch alte PHP-Skripte der alten Site verarbeiten, um auf einen HTTPS-Link (mit einer anderen Struktur) umzuleiten.

Ich habe versucht, dies in einen PHP-Handler zu packen, inStandort / {}Block, inStandort /Download {}Block, aber alles schlägt fehl und der Standardtrigger wird für dieses Skript gezogen (404 im PHP-Handler)

    rewrite ^/download\.php\?file_id=(.*)$ https://$server_name/download/id/$1 permanent;

Wie gehe ich richtig damit um? Wo muss ich diese Ausnahme in der NGINX-Konfiguration einfügen, damit sie funktioniert? Was mache ich falsch?

PS. Ich muss für andere Dinge eine separate HTTP-Konfiguration beibehalten.

Antwort1

Ok, ich habe die Antwort gefunden. Die Reihenfolge der Operationen ist wichtig, sie ist gut erklärt unter

https://stackoverflow.com/questions/59846238/guide-on-how-to-use-regex-in-nginx-location-block-section

Und so sieht die Lösung aus:

location ^~ /download.php {
    rewrite ^ https://$server_name/download/id/$arg_file_id permanent;
}

verwandte Informationen