URL に関係なく単一の PHP ファイルを実行するシンプルな Nginx サイトがあります (CSS/JS ファイルは通常どおりに提供されます)
しかし、何をしても、複数のブラウザでテストしても、GET/URL パラメータを含めるたびに、 の直前に末尾のスラッシュが追加されます?
。例:
example.com?test=1
リダイレクト先 =>example.com/?test=1
example.com/path?test=1
リダイレクト先 =>example.com/path/?test=1
これは私が現在使用している設定です
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;
}
これを防ぐ方法を誰か知っていますか?
答え1
議論されているnginxルールの1つに引っかかっていると思います ここそれは…と言います。
場所がスラッシュ文字で終わるプレフィックス文字列で定義され、リクエストが proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass、または grpc_pass のいずれかで処理される場合、特別な処理が実行されます。この文字列に等しいが末尾のスラッシュがない URI を持つリクエストへの応答として、スラッシュが追加されたリクエストされた URI に、コード 301 の永続的なリダイレクトが返されます。これが望ましくない場合は、次のように URI と場所の完全一致を定義できます。
さらに議論があります。あなたの例の URI は実際には最初の場所指定 (明らかにスラッシュで終わる) によって処理されるので、リクエスト URI にスラッシュが追加されると思います。
次のような場所指定の方location ~ .*$ { commands; }
がうまくいくかもしれない