包含 zf2/php 文件的多个子目录的 nginx 配置不起作用

包含 zf2/php 文件的多个子目录的 nginx 配置不起作用

我的根结构如下所示

/根/ /根/项目A/... /根/项目B/... /根/项目C/...

之前我在 nginx 文件中为每个子目录配置了一个额外的位置块。这些位置“块”如下所示:

server {
listen   80;
listen   [::]:80;

root /usr/share/root/projectA/public/;
index index.php index.html index.cgi;

server_name www.test.de;

location / {        
    try_files $uri $uri/ /index.php?$args;      
}

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;       
    fastcgi_index index.php;
    include fastcgi_params;
}

}

这样,位于 /root/projectA 中的 ZF2 应用程序就可以按预期运行。但随着子项目数量的增加,我想使用通用正则表达式解决方案,这样我就不必为每个子目录一遍又一遍地编写相同的块。

因此,这是我的方法来使这些项目在子域 vendor.test.de 下可用,并且每个项目在 vendor.test.de/projectA/... 下可用:

server {
listen   80;
listen   [::]:80;

root /usr/share/root/;
index index.php index.html index.cgi;

server_name vendor.test.de;

rewrite_log on;
error_log /var/log/nginx/debug.log debug;

location ~ ^/(.+)/ {
    root /usr/share/root/$1/public;
    try_files $uri $uri/ $1/public/index.php?$args; 

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;       
        fastcgi_index index.php;
        include fastcgi_params;
    }   
}

}

但我得到的只是 404,它根本不起作用。我对日志文件进行了一些调试,它似乎表现得很奇怪,试图获取 /usr/share/root/index.php 而不是 /usr/share/root/projectA/public/index.php,尽管它首先找到了正确的位置……

对此有什么想法吗?!

提前致谢!

答案1

在您的中location您需要使用alias而不是root

    alias /usr/share/root/$1/public/;

相关内容