Nginx如何配置将/files前缀请求直接转发给Laravel PHP服务处理
问题原因
你之前写的配置报错,是因为try_files指令要求至少传入2个路径参数,你只传了1个/index.php?$query_string,不符合Nginx语法要求,所以配置校验失败。
同时你当前场景还有一个隐藏问题:/files路径下的请求后缀如果是jpg、css等静态资源后缀,会被你现有配置的静态资源location块优先匹配,直接去本地查找文件,依然会产生无用的404错误日志。
正确配置方案
在现有配置的location /块之前,插入如下配置即可:
location ^~ /files { # 直接重写所有请求到Laravel入口文件,完整保留原始查询参数 rewrite ^ /index.php$is_args$args break; # 复用PHP处理的FastCGI配置 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root/index.php; include fastcgi_params; }
配置说明
^~ /files是前缀匹配规则,优先级高于后续的静态资源正则匹配,确保所有/files开头的请求都会走这个块,不会被静态资源规则拦截- 全程不会检查本地文件系统是否存在对应路径,不会产生多余的404错误日志
$is_args$args会完整保留原请求的所有查询参数,不会出现参数丢失的问题- 不需要修改原有其他配置,原有静态资源处理、普通请求转发逻辑完全不受影响
内容的提问来源于stack exchange,提问作者gbalduzzi
相关产品推荐
相关产品推荐

