Symfony项目外PHP文件无法访问?Nginx 404报错求助
问题分析与解决方案
你的问题根源在于Nginx配置中root指向了Symfony项目的public目录,而location = /info.php块里的SCRIPT_FILENAME使用$document_root$fastcgi_script_name,这会让Nginx尝试在Symfony的public目录下查找info.php——但你的文件实际在项目目录外,所以必然返回404。
以下是两种可行的解决方法:
方法一:直接指定文件绝对路径
这是处理单个外部PHP文件最直接的方式,修改location = /info.php块,将SCRIPT_FILENAME设置为info.php的真实绝对路径:
server { listen 443 ssl; server_name mydomain; root mypublicdir/public; location / { try_files $uri /index.php$is_args$args; } location = /info.php { include fastcgi_params; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; # 替换为info.php的实际绝对路径,比如 /home/user/info.php fastcgi_param SCRIPT_FILENAME /absolute/path/to/info.php; } }
方法二:为外部PHP文件配置独立路径(多文件场景)
如果你有多个外部PHP文件,可以创建一个独立的location块,指定外部文件所在目录:
server { listen 443 ssl; server_name mydomain; root mypublicdir/public; location / { try_files $uri /index.php$is_args$args; } # 匹配/external/开头的请求,指向外部PHP文件目录 location ^~ /external/ { root /path/to/your/external-php-files; include fastcgi_params; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; } }
配置后,你可以通过mydomain/external/info.php访问位于/path/to/your/external-php-files/info.php的文件。
关键注意事项
- 确保PHP-FPM进程对目标
info.php文件拥有读取权限,否则会返回500错误 - 修改配置后,重启Nginx生效:
sudo systemctl restart nginx - 核对文件绝对路径,避免拼写错误
内容的提问来源于stack exchange,提问作者ertuğrul sinan
相关产品推荐
相关产品推荐

