2012-05-21 38 views
2

我想访问该网址后:斜线论据Nginx的,PHP

http://test/symfony/web/app_dev.php/ 

但它不会工作,因为结尾的斜线的,我得到一个404

这些那些做工精细:

http://test/symfony/web/app_dev.php 
http://test/symfony/web/app_dev.php?/ 

在Apache中,/app_dev.php/something和/app_dev.php?/something是相同的。关于如何在Nginx中实现这个工作的任何想法?

我尝试添加一个重写,没有运气:

location/{ 
      try_files $uri $uri/ @rewrite index.html; 
    } 

    location @rewrite { 
      rewrite ^/(.*\.php)/(.*)$ $1?/$2; 
    } 

回答

1

这是我工作得很好:

location/{ 
      # Remove app.php from url, if somebody added it (doesn't remove if asked for /app.php on the root) 
      rewrite ^/app\.php/(.*) /$1 permanent; 

      try_files $uri $uri/ /app.php?$query_string; 
    } 

    location ~ \.php$ { 
      try_files $uri = 404; 
      # Below is for fastcgi: 
      # fastcgi_pass 127.0.0.1:9000; 
      # fastcgi_index app.php; 
      # include   /etc/nginx/fastcgi_params; 
      # fastcgi_param SCRIPT_FILENAME /mnt/www/live/current/web$fastcgi_script_name; 
      # fastcgi_param SERVER_PORT 80; 
      # fastcgi_param HTTPS off; 
    } 
+0

try_files行应该是'try_files $ uri = 404'而不是'try_files $ uri = 404'。额外的空间会让nginx寻找'$ document_root $ uri','$ document_root =','$ document_root404' – zhangyoufu

0

我终于跨过这对我的作品的答案跌跌撞撞:

location ~ /directory/(.*\.php)(/.*)$ { 
      set $script_filename $1; 
      set $path_info $2; 
      fastcgi_param PATH_INFO  $2; 
      alias /place/directory/$1; 
      include fastcgi_params; 

https://github.com/plack/Plack/issues/281

以下是文档中的相关片段:请注意,它们都不使用nginx提供的用于script_name或path_info的FCGI参数,因为它被称为不正确。

location/{ 
set $script ""; 
set $path_info $uri; 
fastcgi_pass unix:/tmp/fastcgi.sock; 
fastcgi_param SCRIPT_NAME  $script; 
fastcgi_param PATH_INFO  $path_info;