PHP Wordpress 和 Nginx 配置

PHP Wordpress and Nginx Configuration

我的 Wordpress NGINX 配置发生了一些奇怪的事情。这是它的样子:

     location /home {
       root /var/www/html/home;
       try_files $uri $uri/ /home/index.php?$args /home/index.php?q=;
     }
     location ~ home\/.*\.php$ {
       root /var/www/html/home;
       include snippets/fastcgi-php.conf;
       fastcgi_pass    unix:/var/run/php/php7.4-fpm.sock;
       fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
     }

现在,如果我导航到:https://example.com/home/cart/?ec_page=checkout_info 并检查 $_REQUEST 和 $_SERVER 自动变量,我会发现明显的不一致:

print_r($_REQUEST) has [REQUEST_URI] => /home/cart/?ec_page=checkout_info
print_r($_GET) has [q] => 

所以对我来说似乎“很明显”我的 NGINX 配置没有正确调用 PHP,所以 $_GET 被 [ec_page] => checkout_info 填充,并且盯着我的 NGINX 规则,我有点看到它一定是因为 /home/index.php?$args 解析为 /home/index.php?/cart/?ec_page=checkout_info 或类似的废话,导致 404 错误,因此委托给 /home/index.php?q= 并且 </code> 显然是空的。 </p> <p>正确的做法是什么?我不认为这很重要,但值得我 运行 进入这里的麻烦与 wp-easycart 插件有关,我的 wordpress 站点配置为 <code>Post name 永久链接(我不想改变)。如果我 do 将 Wordpress 的永久链接设置更改为 Plain 那么上面的 NGINX 配置似乎可以工作,但这只是因为它有效地改变了 URL 的方式,所以没有路由参数和一切成为查询字符串参数。

问题是你是如何得到 try_files $uri $uri/ /home/index.php?$args /home/index.php?q=; 的,因为它在某些方面毫无意义。

</code> 用于正则表达式捕获组,但那里有 none。所以它确实永远是空的。</p> <p><code>$args 应与 $is_args 组合,如果没有参数则解析为空字符串,否则 ?

只有一种事实上的标准结构适用于包括 WordPress 在内的许多 CMS 框架,它是这样的:

try_files $uri $uri/ /index.php$is_args$args;

这是针对 WordPress 位于网站根目录的情况。

对于你的情况(在 home 子目录中):

location = /home {
    return 301 /home/;
}
location /home/ {
    try_files $uri $uri/ /home/index.php$is_args$args;
}

这应该足以将参数正确传播到 PHP 中的 $_GET 变量。

如果您想要优化此配置,出于性能原因,您可以查看 try_files-less configuration