首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子目录的nginx - php返回404

问子目录的nginx - php返回404
EN

Stack Overflow用户
提问于 2019-02-20 00:48:22
回答 1查看 656关注 0票数 1

我在php页面上从我的主机的一个子位置得到了404个错误。我的配置是:

代码语言:javascript
复制
server {
    listen 80;
    root /var/www/html/nisite;
    index  index.php index.html index.htm;
    server_name  www2.company.com wp-newsite-stg-02.company.com;

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

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

  # =================================

    location /office {
        root /var/www/html/oldsite;
    }

}

当我转到http://www2.company.com/office时,我可以看到页面,所有的静态资源也都提供了服务,但当我试图访问http://www2.company.com/office/php/form-process.php时,我得到了404错误。

为什么location ~ \.php$不能正确处理此请求?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-20 02:16:57

location块从周围块中的root语句继承$document_root的值。您从两个独立的根目录运行PHP脚本,因此需要两个独立的location块来处理它们。

解决方案是使用嵌套的location块。

例如:

代码语言:javascript
复制
location ^~ /office {
    root /var/www/html/oldsite;

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

使用^~修饰符确保正确的location处理.php文件。详情请参见this document。使用try_files语句避免passing uncontrolled requests to php

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54771165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档