2014-11-09 4 views
0

내가 Symfony2 내 nginx를 구성 파일에 무슨 일이 일어나고 있는지에 대한 명확한 이해를 얻으려고 함께 Symfony2의 URI에 app.php 제거하는 방법 여기있다 : 한마디로는 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; 
     } 
} 

, 나는 사용자가 설정할 수있는 모든 가능한 URI에서 app.php를 제거하려고합니다. example.com/app.php/demo 또는 example.com/app.php.

이 구성은 위와 같은 URI에서 실제로 작동하지만 "root"URI example.com에 액세스하려는 경우 리디렉션 루프가 발생합니다.

try_files에서 $ uri /를 제거하고 거기에 $ uri 및 대체 @symfony 만 남겨두면 모든 디렉토리에 액세스 할 수 없다는 점을 제외하면 모든 것이 올바르게 작동합니다. SF로 처리 될 예정입니다.

나는 아이디어가 없으며 nginx와 다시 쓰기가 실제로 작동하는 방식에 대해 많은 연구를했지만 지금은 나에게 막 다른 길이다. $ uri/try_files에 머무르고 앞에서 루프를 빠져 나갈 수있는 해결책을 찾으면 알려주세요.

답변

0

이 솔루션은 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; 
} 
+0

감사합니다,하지만이 구성의 문제는 $ URI/위치/{} 블록을하지 않는다는 것입니다, 나는 아직 알 수없는 이름을 가진 일부 사용자 특정 폴더가있을 수 있기 때문에 나는/$ URI를 필요 액세스 할 수 있어야합니다 (예 : 다른 앱을 포함 할 수 있음). 또한 실제로 사용자가 명시 적으로 설정할 수있는 URI에서 app.php를 잘라 내지 않습니다. –