So entfernen Sie den abschließenden Schrägstrich vor URL-Parametern in Nginx

So entfernen Sie den abschließenden Schrägstrich vor URL-Parametern in Nginx

Ich habe eine einfache Nginx-Site, die eine einzelne PHP-Datei unabhängig von der URL ausführt (mit Ausnahme von CSS/JS-Dateien, die normal bereitgestellt werden).

Was ich jedoch auch mache und mit mehreren Browsern teste, jedes Mal, wenn ich GET/URL-Parameter einfüge, wird direkt vor dem ein abschließender Schrägstrich eingefügt ?. Beispiel:

  • example.com?test=1leitet weiter zu =>example.com/?test=1
  • example.com/path?test=1leitet weiter zu =>example.com/path/?test=1

Dies ist die Konfiguration, die ich derzeit verwende

    index index.html index.php;

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

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

Weiß jemand, wie man das verhindern kann?

Antwort1

Ich denke, Sie unterliegen einer der besprochenen Nginx-Regeln Hierwas sagt...

Wenn ein Standort durch eine Präfixzeichenfolge definiert ist, die mit einem Schrägstrich endet, und Anforderungen von einem der folgenden Verfahren verarbeitet werden: proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass oder grpc_pass, wird die spezielle Verarbeitung ausgeführt. Als Antwort auf eine Anforderung mit einer URI, die dieser Zeichenfolge entspricht, jedoch ohne den abschließenden Schrägstrich, wird eine permanente Umleitung mit dem Code 301 an die angeforderte URI mit angehängtem Schrägstrich zurückgegeben. Wenn dies nicht gewünscht ist, kann eine genaue Übereinstimmung von URI und Standort wie folgt definiert werden:

und es gibt noch mehr Diskussionen. Ich denke, Ihre Beispiel-URI wird tatsächlich von der ersten Standortspezifikation verarbeitet (die offensichtlich mit einem Schrägstrich endet), sodass der Anforderungs-URI ein Schrägstrich hinzugefügt wird.

eine Standortangabe wie location ~ .*$ { commands; }würde besser funktionieren

verwandte Informationen