Вот соответствующая часть моего 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;
}
Вы можете использовать вложенный блок местоположения для обработки .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$ {
...
}
Видеть этот документ для большего.
РЕДАКТИРОВАТЬ: Я понял, что мне нужно использовать именованные захваты, поскольку числовые захваты выходят за рамки.