try_files
是 Nginx 中一个非常强大的指令,用于在请求到达时尝试查找文件或目录。在 PHP 应用中,try_files
通常用于处理静态文件、重定向请求到 PHP 解释器(如 PHP-FPM),以及处理 404 错误等。以下是 try_files
在 PHP 环境中的几种常见用法及其区别:
try_files
可以用于检查请求的文件是否存在,如果存在则直接返回该文件,否则继续处理请求。
location / {
try_files $uri $uri/ =404;
}
$uri
:尝试匹配请求的 URI 对应的文件。$uri/
:如果 $uri
不存在,尝试匹配请求的 URI 对应的目录。=404
:如果前两者都不存在,返回 404 错误。当请求的文件不存在时,try_files
可以将请求转发给 PHP-FPM 处理。
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
try_files $uri =404;
:首先检查请求的 PHP 文件是否存在,如果不存在则返回 404 错误。fastcgi_pass
:将请求转发给 PHP-FPM 处理。在 MVC 框架(如 Laravel、Symfony)中,通常使用前端控制器模式,所有请求都通过 index.php
处理。
location / {
try_files $uri $uri/ /index.php?$query_string;
}
$uri
:尝试匹配请求的 URI 对应的文件。$uri/
:尝试匹配请求的 URI 对应的目录。/index.php?$query_string
:如果前两者都不存在,将请求重写到 index.php
,并将查询字符串传递给 index.php
。结合静态文件处理和前端控制器模式,try_files
可以同时处理静态文件和动态请求。
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location
块处理静态文件和前端控制器。location
块处理 PHP 文件,确保 PHP 文件存在后将其转发给 PHP-FPM。try_files
也可以用于自定义 404 错误页面。
location / {
try_files $uri $uri/ /custom_404.html;
}
location = /custom_404.html {
internal;
}
try_files $uri $uri/ /custom_404.html;
:如果请求的文件或目录不存在,返回自定义的 404 页面。location = /custom_404.html { internal; }
:确保自定义的 404 页面只能通过内部重定向访问。try_files
还可以用于处理重定向。
location /old-path {
try_files $uri /new-path;
}
location /new-path {
# 处理新路径的逻辑
}
try_files $uri /new-path;
:如果 /old-path
不存在,重定向到 /new-path
。try_files
可以用于检查并返回静态文件。try_files
可以确保 PHP 文件存在后将其转发给 PHP-FPM。try_files
可以将所有请求重写到前端控制器(如 index.php
)。try_files
可以用于返回自定义的 404 页面。try_files
可以用于处理路径重定向。这些用法可以根据实际需求灵活组合,以满足不同的应用场景。