如何摆脱app.php在Symfony2中的URI与Nginx的(How to get rid of

2019-10-21 06:38发布

我试图让这是怎么回事与Symfony2的我nginx的配置文件的一个清醒的认识,那就是:

    server {
        listen 80;
        autoindex on;
        server_name example.com;
        root /var/www/example.com/web;

        rewrite ^/app\.php/?(.*)$ /$1 permanent;

        location / {
            index app.php;
            try_files $uri $uri/ @symfony;
        }

        location @symfony {
            rewrite ^(.*)$ /app.php/$1 last;
        }

        location ~ ^/app\.php(/|$) {
            include fastcgi_params;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        }
}

总之,我试图剥离app.php在每一个可能的URI,用户可以设置如example.com/app.php/demo或只是example.com/app.php。

此配置实际工作像那些上面的URI,但它会导致重定向循环中尝试访问“根” URI example.com情况。

如果我从try_files删除$ URI /只留下$ uri和后备@symfony那里,一切工作正常,除非他们打算通过SF处理,我不能访问任何目录。

我的想法,做了很多研究如何nginx的重写和实际工作,但现在这对我来说是死路一条。 如果你能找到一个解决办法留在$ URI /在try_files,并得到了循环在前面,请让我知道。

Answer 1:

这从溶液Nginx的技巧为我工作。 这几乎是,但并不完全,你的一样。

server {
server_name domain.tld www.domain.tld;
root /var/www/project/web;

location / {
# try to serve file directly, fallback to rewrite
try_files $uri @rewriteapp;
}

location @rewriteapp {
# rewrite all to app.php
rewrite ^(.*)$ /app.php/$1 last;
}

location ~ ^/(app|app_dev|config).php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}

error_log /var/log/nginx/project_error.log;
}


文章来源: How to get rid of app.php in Symfony2 URIs with Nginx