У меня есть два каталога, / home / php / www/public/ и / home / php / www/private/, и я хотел бы обслуживать, какой из них зависит от первой части uri.
Я бы хотел, чтобы / foo / действовал «нормально» в том смысле, что он должен обслуживать любой файл, находящийся в этом месте, например mysite.com/about будет обслуживать /public/about.php. Однако / private / всегда будет обслуживать один файл независимо от запроса, например mysite.com/private/foo, mysite.com/private/bar и mysite.com/private/foo/test будут обслуживать / private / app. php.
Я, вероятно, нахожусь в сотне различных вариаций того, что я видел здесь и в других гуглах, но, будучи новичком во всем этом, не могу собрать воедино именно то, что мне нужно. После нескольких дней проб и ошибок я близок к тому, что мне нужно, mysite.com/about правильно обслуживает /public/about.php, а mysite.com/private/whatever получает /private/app.php, но он не выполняет его, а вместо этого служит для загрузки.
Вот что у меня есть:
server {
listen 80;
listen [::]:80;
root /home/php/www/public;
index index.php;
server_name mysite.com;
location /private/ {
alias /home/php/www/private;
try_files /app.php =404;
location ~ [^/]\.php(/|$) {
# location ~ \.php$ {
# fastcgi_split_path_info ^(.+\.php)(/.+)$;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
# fastcgi_index app.php;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# include fastcgi_params;
# return 302 https://google.com;
}
}
location / {
try_files $uri $uri.html $uri/ @extensionless-php;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
location ~ /\.ht {
deny all;
}
}
Если я заменю все внутри блока location /private/
просто return 302 https://google.com
он успешно перенаправляется на google.com, поэтому я знаю, что этот блок местоположения возвращается, но помещает то же самое внутри location ~ \.php$
внутри location /private/
, ничего не происходит, поэтому мне кажется, что он не попадает в этот блок, что я скучаю? В /var/log/nginx/error.log нет связанных с этим ошибок.