如何摆脱与Nginx的Symfony2 URI中的app.php

我试图清楚地了解Symfony2的nginxconfiguration文件是怎么回事,这里是:

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; } } 

简而言之,我试图去掉用户可以设置的每个可能的URI中的app.php,例如example.com/app.php/demo或者example.com/app.php。

这个configuration实际上适用于上述的URI,但是在尝试访问“root”URI example.com的情况下会导致redirect循环。

如果我从try_files中删除$ uri,并且只留下$ uri和一个后备@symfony,那么一切正常,除了我不能访问任何目录,因为它们将被SF处理。

我没有想法,做了很多关于nginx和重写实际上是如何工作的研究,但到目前为止,对我来说,这是一个死胡同。 如果你可以find一个解决scheme,留在$ uri /在try_files并摆脱在前面的循环,请让我知道。

这个来自Nginx Tips的解决方案为我工作。 这几乎和你的一样,但不完全一样。

 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; }