【发布时间】:2020-08-21 08:43:29
【问题描述】:
我有两个目录,/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.
与我在这里和其他谷歌看到的不同,我可能有 100 多种不同的变体,但对所有这些都非常陌生,似乎无法准确地拼凑出我需要的东西。经过几天的反复试验,我接近了我所追求的,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 中没有与此相关的任何错误。
【问题讨论】: