首页 文章

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

提问于
浏览
1

我在 /opt/nginx 有我的nginx主页,里面有 site1mail 文件夹, site1html 文件夹,这是一个wordpress安装和 mail 是一个webmail网站,它们都必须代理到php-fpm, site1/html 工作就像魅力没问题一点都不

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

我想要做的是,当请求 domain1.com/mail 时,提供 mail 文件夹( site1 的兄弟)的内容 . 如果我在邮件中留下 index.html 文件,当请求 domail1.com/mail 时, index.html 会毫无问题地提供给客户端,但如果我尝试发送 mail/index.php404 error rise instead ,我做错了什么?低于我的配置:

/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 回答

  • 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块 . 我还删除了未使用的路径信息代码 .

相关问题