花了几个小时才找到这个(sf2 doc没有解释如何需要和解释cgi参数,你需要通过Request.php来理解),所以我分享这个。
这是一个配置,在目录 {subdir} 中使用 sf2 似乎没问题(并且禁止通过 Web 访问除 {subdir}/web/* 之外的其他文件)。
它适用于我的 php-fpm(套接字)。
当然,用你的 /path/from/docroot/to/symfony_root/ 替换 "{subdir}"
可以通过将“dev”添加到“{subdir}”来选择开发环境(因为 url 中的 app_dev.php 不再适用于此配置)
server {
# general directives
location ~ ^/{subdir}(/.*)$ {
try_files /{subdir}/web$1 @sf2;
}
location ~ ^/{subdir}dev(/.*)$ {
expires off;
try_files /{subdir}/web$1 @sf2dev;
}
location @sf2 {
expires off;
fastcgi_pass {your backend};
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/{subdir}/web/app.php;
fastcgi_param SCRIPT_NAME /{subdir}/app.php;
fastcgi_param REQUEST_URI /{subdir}$1;
}
location @sf2dev {
expires off;
fastcgi_pass {your backend};
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/{subdir}/web/app_dev.php;
fastcgi_param SCRIPT_NAME /{subdir}dev/app_dev.php;
fastcgi_param REQUEST_URI /{subdir}dev$1;
}
# other location directives
# if some others apps needs php, put your usual location to cactch php here
}
我希望它有所帮助(并且没有任何错误配置),但没有任何保证......
当然,如果您不需要,您可以选择 prod/dev conf。您可以使用 var 并且只使用一个 @sf2 位置:
set $sf2_root /{subdir};
location ~ ^/{subdir}(/.*)$ {
set $sf2_prefix /{subdir};
set $sf2_ctrl app.php;
try_files $sf2_root/web$1 @sf2;
}
location ~ ^/{subdir}dev(/.*)$ {
set $sf2_prefix /{subdir}dev;
set $sf2_ctrl app_dev.php;
expires off;
try_files $sf2_root/web$1 @sf2;
}
location @sf2 {
expires off;
fastcgi_pass {your backend};
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$sf2_root/web/$sf2_ctrl;
fastcgi_param SCRIPT_NAME $sf2_prefix/$sf2_ctrl;
fastcgi_param REQUEST_URI $sf2_prefix$1;
}