Nginx正则location中try_files指向PHP脚本出现404问题求助
问题分析与解决方案
你当前的Nginx配置无法正确将/uploads路径的请求转发到PHP脚本,核心原因是try_files的用法不符合预期——它主要用于静态文件的存在性检查,而非直接触发PHP脚本的执行逻辑,导致请求没有被正确传递到PHP处理块。
解决方案一:使用rewrite内部跳转(推荐)
替换你的uploads location配置块为以下内容:
location ~ ^/uploads/(.*) { rewrite ^/uploads/(.*)$ /file-pickup.php?path=$1 last; }
last指令会让Nginx重新匹配location规则,此时/file-pickup.php会命中你已有的PHP处理块,参数能正确传递,且不会产生301/302外部重定向。
解决方案二:直接在uploads location中配置FastCGI
如果不想依赖rewrite,也可以直接在uploads的location块内配置FastCGI参数,跳过重新匹配步骤:
location ~ ^/uploads/(?<upload_path>.*) { fastcgi_param SCRIPT_FILENAME $document_root/file-pickup.php; fastcgi_param QUERY_STRING path=$upload_path; include fastcgi.conf; fastcgi_pass unix:/var/run/php-fpm/example.sock; }
这种方式直接将请求转发给PHP-FPM处理,无需依赖其他location块,逻辑更直接。
内容的提问来源于stack exchange,提问作者Chris Haas
相关产品推荐
相关产品推荐

