提问者:小点点

NGINX:如何为子文件夹的/index.php提供服务?


我有一个遗留的php websiste,它已经用nginx(和php 7.4)迁移到一个新的服务器上

我的nginx只有这个

server {
    listen 80;

    server_name domain.tld;

    root /var/www/domain.tld;

    error_log   /var/log/nginx/domain.tld-error.log  warn;
    access_log  /var/log/nginx/domain.tldt-access.log combined;

    client_body_buffer_size     10M;
    client_max_body_size        10M;

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

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    }
}

如果我可以访问mydomain.tld,那么它可以正确地服务mydomain.tld/index.php

但是如果我访问mydomain.tld/subfolder或mydomain.tld/subfolder/,它就不能像我所期望的那样为mydomain.tld/subfolder/index.php提供服务

我做错了什么?


共1个答案

匿名用户

我决定修改丹尼尔W

我将location/块移动到location~\.php$

但我并没有删除首字母/,我还添加了$uri

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
}


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

如果我会发现一些陷阱,我会更新我的答案