是$ uri / Nginx的某种特殊语法吗?

时间:2017-06-02 21:38:38

标签: nginx nginx-location

如果我有以下配置,那么请求/直接从服务器根目录下载index.php文件(即,不传递给php-fpm)。

server {
    listen 127.0.0.1:8080;
    root /home/hasib/playground/php/;
    server_name test.test;
    index index.php;

    location / {
            try_files $uri $uri/index.php =404;
    }

    location ~ \.php$ {
            include fastcgi_params;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

但是,如果我将try_files行更改为:

            try_files $uri $uri/ =404;

然后通过请求/,我得到了index.php文件的预期输出(即,php-fpm的处理输出)。

我还尝试将文件夹名称放在try_files中,如下所示:

            try_files $uri /myfolder/ =404;

但请求/myfolder/时返回301重定向到/,而不是尝试myfolder目录下的index.php文件。

所以,我的问题是,$uri/是Nginx的某种特殊语法吗?由于其他配置始终直接提供文件或重定向到myfolder。但是通过包含$uri/它会尝试将index.php文件传递给php-fpm。

1 个答案:

答案 0 :(得分:1)

您的第一个示例无效。 .php文件需要在另一个location中处理,因此必须是try_files语句的最后一个参数。有关详情,请参阅this document

任何以/结尾的文件参数都会检查是否存在目录,因此$uri/并不特殊,但尾随/。这用于调用index处理。有关详情,请参阅this document