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,我想我只在Firefox上得到403,因为我尝试访问该网站很多次。但无论哪种方式,它都不起作用。

nginx上有一个关于aliastry_files指令的非常古老的开放错误。

对于您的第一个配置文件,两个 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 的命名空间中可能会使解决方案变得不必要地困难。