在nginx上的虚拟目录中托管symfony

时间:2014-12-01 16:06:55

标签: symfony nginx

我正在尝试在虚拟文件夹中托管一个symfony应用程序,并使用url重写nginx。

根据我发现的各种例子,我遇到了类似的事情:

    upstream phpfcgi {
        server unix:/var/run/php5-fpm.sock;
    }

    server {
        listen 443;
        server_name localhost;

        root /realpath/Symfony/web/;

        [ssl stuff]

        # strip app.php/ prefix if it is present
        rewrite ^/app_dev\.php/?(.*)$ /$1 permanent;

        location /virtual{
            alias /realpath/Symfony/web/;
            index app_dev.php;
            try_files $uri @rewriteapp;
        }

        location @rewriteapp {
            rewrite ^/virtual/(.*)$ /app_dev.php/$1 last;
        }

        # pass the PHP scripts to FastCGI server from upstream phpfcgi
        location ~ ^/(app|app_dev|config)\.php(/|$) {
            fastcgi_pass phpfcgi;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param HTTPS on;
        }
    }

如果我从两个第一个位置删除/virtual,它的工作正常。 我应该在第三个位置设置SCRIPT_URI吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

以下是解决方案,请参阅添加的行:

location ~ ^/(app|app_dev|config)\.php(/|$) {
    fastcgi_pass phpfcgi;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    # Add this line:
    fastcgi_param SCRIPT_NAME /virtual$fastcgi_script_name;

    fastcgi_param HTTPS on;
}