在Nginx中,try_files
指令用于检查文件是否存在,并根据结果决定如何处理请求。当涉及到PHP参数传递时,选择合适的配置方式非常重要,以确保请求能够正确传递给PHP处理器(如PHP-FPM),并且参数能够被正确处理。
try_files
指令的常见配置假设你有一个典型的PHP应用,你希望Nginx首先检查请求的文件是否存在,如果不存在,则将请求传递给PHP处理器(如 index.php
)来处理。
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
try_files $uri $uri/ /index.php?$query_string;
:
$uri
: 首先尝试直接访问请求的文件。$uri/
: 如果请求的是一个目录,尝试访问该目录下的索引文件(如 index.html
或 index.php
)。/index.php?$query_string
: 如果前两个尝试都失败,则将请求重写到 index.php
,并将原始请求的查询字符串($query_string
)附加到 index.php
的URL中。location ~ \.php$
:
.php
结尾的请求。fastcgi_pass
指定了PHP-FPM的监听地址。fastcgi_param SCRIPT_FILENAME
确保PHP处理器知道要执行哪个脚本文件。$query_string
:
?
后面的部分)。$query_string
附加到 index.php
的URL中,Nginx会将原始请求的参数传递给PHP处理器。确保 try_files
指令正确传递参数:
try_files $uri $uri/ /index.php?$query_string;
可以确保所有请求参数都被正确传递给PHP处理器。避免重复传递参数:
try_files
中已经传递了 $query_string
,确保在 fastcgi_param
中没有重复传递参数。安全性:
.env
文件)。location ~ /\.ht
块来阻止访问 .htaccess
文件。在Nginx中,使用 try_files
指令结合 $query_string
是一种常见且有效的方式来处理PHP请求并传递参数。这种配置方式确保了请求能够正确传递给PHP处理器,并且参数能够被正确处理。通过遵循上述最佳实践,你可以确保你的Nginx配置既高效又安全。