Nginx Zend Framework 和静态内容错误

Nginx Zend Framework and Static Content Error

这是相关的 nginx 配置(这不是纯 ZF 应用程序,而是嵌入了 ZF)

location /interface/modules/zend_modules/public/ {
    root /interface/modules/zend_modules/public;
    try_files $uri $uri/ $document_root/$uri $document_root/index.php$is_args$args;
}

location /interface/modules/zend_modules/public/(css|js|images)/ {
    autoindex on;
    try_files $uri $uri/ =404;
}

location ~ \.php$ {
    root /srv/app;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi.conf;
}

http://example.com/interface/modules/zend_modules/public/Installer成功returns页面,但是CSS,JS,所有图片都返回404

我只是不知道如何让我的静态内容不被重定向到 index.php(静态内容位于 .../zend_modules/public/(css|js|images)

第一个位置块没有按您预期的方式工作。由于您的奇怪 root 值,它只是将 URI 重写为 /interface/modules/zend_modules/public/index.php

对于所有 location 块,root 的值应该是 /srv/app,因为 nginx 通过将 root 值与 URI 连接来构造路径名.有关详细信息,请参阅 this document

您建议此 server 实现多个应用程序,因此要将这些位置限制为以 /interface/modules/zend_modules/public/ 开头的 URI,请使用嵌套位置并使用 ^~ 修饰符。有关详细信息,请参阅 this document

例如:

location ^~ /interface/modules/zend_modules/public {
    root /srv/app;

    try_files $uri $uri/ /interface/modules/zend_modules/public/index.php$is_args$args;

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi.conf;
    }
}

编辑:

如果多个应用程序基于 PHP,并且共享相同的 root,您可以使用如下内容:

root /srv/app;

location /interface/modules/zend_modules/public {
    try_files $uri $uri/ /interface/modules/zend_modules/public/index.php$is_args$args;
}
location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    include fastcgi.conf;
}