同一主题的三个不同教程中提供的三个类似的 Nginx Location 指令之间的区别

同一主题的三个不同教程中提供的三个类似的 Nginx Location 指令之间的区别

我已经建立了一个带有 Wordpress 的 Ubuntu 20.04 LEMP 服务器,并使用了一些教程来帮助我配置 Nginx。到目前为止,我一切都运行正常,但在多个 Ubuntu 中LEMP 服务器 + Wordpress“教程中,我注意到一个不一致在 Nginx 位置块指令中,想要解释一下每个 Nginx 位置指令之间的区别:

1) Linuxbabe 的 LEMP Wordpress 教程他指示在我的 Nginx 虚拟主机中使用以下位置指令:

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

这打破了事情(按钮实际上不会注销/清空购物车)与我的 Woo Commerce“帐户注销”按钮以及我的 Woo Commerce“清空购物车”按钮有关,所以这对我来说不是一个解决方案。

2) 这个 Devpress LEMP Wordpress 教程他指示在我的 Nginx 虚拟主机中使用以下位置指令:

location / {
    try_files $uri $uri/ /index.php?$args;
}

此固定我的 Woo Commerce“注销”和“清空购物车”按钮,并使它们真正发挥作用并完成它们应该做的事情。

3) 这个 Digitalocean LEMP Wordpress 教程他指示在我的 Nginx 虚拟主机中使用以下位置指令:

location / {
        try_files $uri $uri/ /index.php$is_args$args;
}

这也修复了我的 Woo Commerce“注销”和“清空购物车”按钮,并使它们真正发挥作用并完成它们应该做的事情。

所以我的问题是,

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

location / {
    try_files $uri $uri/ /index.php?$args;
}

location / {
        try_files $uri $uri/ /index.php$is_args$args;
}

当将 Wordpress 与 Woo Commerce 结合使用时,Nginx 中的位置指令?

您能否详细说明一下,为什么其中一个会破坏 Wordpress,而另外两个会修复它?我实际上应该使用哪一个?

答案1

不同之处在于所使用的变量,所以让我们看看它们的文档。

$is_args

?如果请求行有参数,则为空字符串,否则

$args

请求行中的参数

$args不包含分隔符?,因此在这种情况下正确的配置是:

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

那么,为什么$is_args不简单地包含在中呢$args?它在您想要添加参数的配置中很有用,例如,

try_files $uri $uri/ /index.php?lang=$geoip_country_code&$args;

在那里,添加一个参数?将是一个错误。在字符串末尾添加参数也不是一种选择,因为?&如果没有其他参数,那么就会有一个空的参数。

相关内容