Настройте nginx + php для обслуживания файлов php из домашних каталогов [закрыто]

Вот соответствующая часть моего nginx.conf, которая не работает для файлов php, находящихся в домашних каталогах пользователей:

  location ~ ^/~(.+?)(/.*)?$ {
     alias /usr/home/$1/www$2;
     autoindex on;
    }

   # Serve user directories php files
    location ~ ^/~(.+?)(/.*\.php)$ {
        alias /usr/home/$1/www;
        try_files $2 =404;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_intercept_errors on;
        include fastcgi_params;
        fastcgi_param SCRIPT_NAME /~$1$fastcgi_script_name;
        }

    location ~ \.php$ {
         try_files $uri =404;
         fastcgi_split_path_info ^(.+\.php)(/.+)$;
         fastcgi_pass unix:/var/run/php-fpm.sock;
         fastcgi_index index.php;
         fastcgi_param SCRIPT_FILENAME $request_filename;
         include fastcgi_params;       
        }
0
задан 14 June 2017 в 08:33
1 ответ

Для работы с файлами .php можно использовать вложенный блок определения местоположения. Например.

location ~ ^/~(?<user>.+?)(?<path>/.*)?$ {
    alias /usr/home/$user/www$path;
    autoindex on;

    location ~ \.php$ {
        if (!-f $request_filename) { return 404; }

        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_intercept_errors on;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $request_filename;
    }
}

location ~ \.php$ {
    ...
}

Смотрите этот документ подробнее.

EDIT: Я понял, что мне нужно использовать именованные захваты, так как цифровые захваты выходят за рамки видимости.

.
1
ответ дан 4 December 2019 в 16:14

Теги

Похожие вопросы