Nginx 别名和 try_files 到子文件夹不起作用

Nginx alias and try_files to subfolder doesn't work

当我将 php 文件放入 /home/tim_test 时,它工作正常

当我将文件放入 /home/tim_test/hmm 时,它不起作用。为什么不呢?

server {

    listen 80;
    root /home;
    index index.php;

    location /admin {

        alias /home/admin/;
        try_files $uri $uri.html $uri/ /home/admin/;
        index index.html index.htm index.php;

    }

    location /tim_test/ {

        alias /home/tim_test/;
        try_files $uri $uri.html $uri/ /home/tim_test/;
        index index.html index.htm index.php;

    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        location ~ \.php$ {

            try_files $uri =404;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;

        }     

}

我尝试将我的文件编辑成这样以反映文件夹更改,但它不起作用,当我在浏览器中访问 /tim_test 时收到 403 禁止访问

location /tim_test/ {

    alias /home/tim_test/hmm/;
    try_files $uri $uri.html $uri/ /home/tim_test/hmm/;
    index index.html index.htm index.php;

}

谢谢!我很困惑。我尝试了 100 多次 nginx 重启和不同的事情。

编辑:如果我在 chrome 上去那里,我会收到 404 not found,我想我只是在 firefox 上收到 403,因为我尝试多次访问该站点。无论哪种方式,它都不起作用。

nginx 上有一个关于 aliastry_files 指令的 very old open bug

关于您的第一个配置文件,两个 alias 指令是不必要的,因为两个位置块都继承了 root 的值并附加了位置的值。

此外,try_files 指令(/home/admin//home/tim_test/)的最后一个元素不是 URI。

第一个配置文件应该是:

root /home;
location /admin {
    try_files $uri $uri.html $uri/ /admin/;
    index index.html index.htm index.php;
}
location /tim_test/ {
    try_files $uri $uri.html $uri/ /tim_test/;
    index index.html index.htm index.php;
}

关于子文件夹 hmm。除了 try_files 指令的最后一个元素(已在上面解决)之外,配置看起来不错。这意味着问题可能与 alias / try_files 交互有关。

alias 的替代方案是内部重写,但将目标 URI 放在源 URI 的命名空间内可能会使解决方案变得不必要的困难。