我一直在尝试使用phpbrew
升级到php 7.1,并选择使用nginx安装它,因为我到处读到它比Apache更简单(不是那么简单,在我看来)。 / p>
当我尝试使用nginx运行Symfony2时,我遇到了this doc page,它为nginx上的Sf2提供了基本配置。
我设法配置php-fpm来提供app_dev.php
,并且每个文件都以.php
正确结束。但是,只要我转到其他网址(例如/home
),nginx配置就会中断,我在File not found
中收到php-fpm
错误。
如何配置nginx虚拟主机以允许重写app_dev.php
或app.php
之后的所有内容(就像在apache2上使用modrewrite
一样)?
我的nginx文件供参考:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
location /my-app {
index web/app_dev.php;
try_files $uri /web/app.php$is_args$args;
}
location /dist {
root /usr/share/nginx/html;
index depp/index.php;
try_files $uri /depp/index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass unix:/home/gabriel/.phpbrew/php/php-7.1.0/var/run/php-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param REQUEST_URI $uri?$args;
}
}
答案 0 :(得分:0)
您缺少重写条件来捕获所有传入的请求并将它们转发给前端控制器。
尝试类似:
# strip app.php/ prefix if it is present
rewrite ^/app\.php/?(.*)$ /$1 permanent;
location /my-app {
index app.php;
try_files $uri @rewriteapp;
}
location @rewriteapp {
rewrite ^(.*)$ /app.php/$1 last;
}
# Symfony 2 app index
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/home/gabriel/.phpbrew/php/php-7.1.0/var/run/php-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# deny access to any other php files
location ~^.*\.php(/|$) {
deny all;
}
您当前的配置是任何.php
脚本的更通用的配置,但Symfony2和框架通常只提供一个全能的前端控制器。