我有一个奇怪的重写问题,nginx & php5-fpm在* nix平台上。我使用一个Router.php类作为应用程序资源,并且在这个文件中有很多路由,为相应的模块&控制器生成用户友好的uri。现在,我想移动一些基于正则表达式的应用程序路由到nginx级别,当我将路由移动到nginx config时,我得到“无效的控制器指定”错误。Nginx + Php-fpm + Zend Framework 1.11奇怪的重写错误
简单地说,当用户请求/ foo URI时,我想要触发BarController的bazAction()。它成功地工作在应用层上(通过路由器资源)
public function init() {
$router = Zend_Controller_Front::getInstance()->getRouter();
$f = new Zend_Controller_Router_Route_Static('foo',
array('controller' => 'Bar',
'action' => 'baz'));
$router->addRoute('foo', $f);
...
当我试图做到这一点使用nginx的重写规则这样
rewrite ^/foo /index.php/bar/baz?$args last;
我收到指定无效控制器(富)错误。我如何正确处理这个重写规则?
我server.config是:
server {
listen 80;
server_name www.dummy.com;
root /Users/foozy/Sites/dummy.com/public;
index index.php;
location/{
try_files $uri $uri/ @rewrites;
}
location @rewrites {
rewrite ^/foo /index.php/bar/baz?$args last;
# i also tried :
# rewrite ^/foo /bar/baz?$args last;
rewrite^/index.php?$args;
}
location ~ ^.+\.php {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}
}
我fastcgi_params文件是:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
... nginx's default params here ...
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
...
fastcgi_param APPLICATION_ENV development;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
而且在php.ini fix_pathinfo设置为0:
cgi.fix_pathinfo=0
PHP V5。 3.8,Nginx v1.0.10
检查,如果这是工作'重写^ foo $ /index.php/bar/baz最后;' – emaillenin 2012-01-04 04:52:53
@emaillenin不,它不工作。 – edigu 2012-01-04 05:22:43