nginx重定向到兄弟文件夹,并提供PHP无法正常工作

时间:2016-02-21 00:40:37

标签: php nginx

我在 / opt / nginx 上有我的nginx主页,里面有 site1 邮件文件夹, site1 html 文件夹是wordpress安装,邮件是一个webmail网站,两者都必须代理到php-fpm, site1 / html 就像魅力一样没有任何问题。

我有 domain1.com ,当我请求 domain1.com 时,我的服务器会提供 site1 / html 内容。

我想要做的是,当 domain1.com/mail 被请求时,提供邮件文件夹的内容(兄弟的 SITE1 )。如果我在邮件中留下 index.html 文件,请求 domail1.com/mail 时, index.html 没有问题地提供给客户端但如果我尝试提供 mail / index.php 404错误上升 ,我在做什么错误?低于我的配置:

/etc/nginx/conf.d/domain1.com.conf

server {
.
.
.

root /opt/nginx/site1/html;
index index.html index.php;

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

location /mail {
    root /opt/nginx/;
    try_files $uri $uri/mail mail/index.php;        
}

location ~ [^/]\.php(/|$) {
    # SECURITY : Zero day Exploit Protection
    try_files $uri =404;
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;

    fastcgi_pass unix:/var/run/php-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}
}

1 个答案:

答案 0 :(得分:1)

您可以使用嵌套的位置块来调用位于不同文档根目录中的PHP脚本。

像这样:

root /opt/nginx/site1/html;
index index.html index.php;

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

location ^~ /mail {
    root /opt/nginx;
    try_files $uri $uri/ /mail/index.php;        

    location ~ \.php$ {
        try_files $uri =404;    
        fastcgi_pass unix:/var/run/php-fpm.sock;
        include fastcgi_params;
    }

}

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php-fpm.sock;
    include fastcgi_params;
}

注意^~修饰符,它允许嵌套的PHP块优先于外部PHP块。我还删除了未使用的路径信息代码。