$uri/ 是 Nginx 的某种特殊语法吗?
Is $uri/ some kind of special syntax for Nginx?
如果我有以下配置,那么对 /
的请求是直接从服务器根目录下载 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;
但是当请求 /
时返回 301 重定向到 /myfolder/
,而不是尝试 myfolder
目录下的 index.php 文件。
所以,我的问题是,$uri/
是 Nginx 的某种特殊语法吗?由于其他配置始终直接提供文件或重定向到 myfolder。但是通过包含 $uri/
它试图将 index.php 文件传递给 php-fpm.
您的第一个示例无效。 .php
文件需要在另一个 location
中处理,因此必须是 try_files
语句的最后一个参数。有关更多信息,请参阅 this document。
任何以 /
结尾的文件参数都会检查目录是否存在,因此 $uri/
并不特殊,但结尾的 /
是。这用于调用 index
处理。有关更多信息,请参阅 this document。
如果我有以下配置,那么对 /
的请求是直接从服务器根目录下载 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;
但是当请求 /
时返回 301 重定向到 /myfolder/
,而不是尝试 myfolder
目录下的 index.php 文件。
所以,我的问题是,$uri/
是 Nginx 的某种特殊语法吗?由于其他配置始终直接提供文件或重定向到 myfolder。但是通过包含 $uri/
它试图将 index.php 文件传递给 php-fpm.
您的第一个示例无效。 .php
文件需要在另一个 location
中处理,因此必须是 try_files
语句的最后一个参数。有关更多信息,请参阅 this document。
任何以 /
结尾的文件参数都会检查目录是否存在,因此 $uri/
并不特殊,但结尾的 /
是。这用于调用 index
处理。有关更多信息,请参阅 this document。