PHP Wordpress和Nginx配置

PHP Wordpress和Nginx配置,php,wordpress,nginx,configuration,Php,Wordpress,Nginx,Configuration,我的Wordpress的NGINX配置有些古怪。下面是它的样子: location /home { root /var/www/html/home; try_files $uri $uri/ /home/index.php?$args /home/index.php?q=$1; } location ~ home\/.*\.php$ { root /var/www/html/home; include snip

我的Wordpress的NGINX配置有些古怪。下面是它的样子:

     location /home {
       root /var/www/html/home;
       try_files $uri $uri/ /home/index.php?$args /home/index.php?q=$1;
     }
     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;
     }
现在,如果我导航到:并检查$\u请求和$\u服务器自动变量,我会发现明显的不一致性:

print_r($_REQUEST) has [REQUEST_URI] => /home/cart/?ec_page=checkout_info
print_r($_GET) has [q] => 
因此,我似乎“很明显”我的NGINX配置没有正确调用PHP,因此$\u GET被弹出
[ec\u page]=>checkout\u info
,并且已经开始关注我的NGINX规则,我认为这一定是因为
/home/index.php?$args
解析为
/home/index.php?/cart/?ec\u page=checkout\u info
或一些类似的废话,导致404错误,从而委托给
/home/index.php?q=$1
并且
$1
显然是空的


正确的方法是什么?我认为这并不重要,但值得一提的是,我在这里遇到的麻烦与wp easycart插件有关,我的wordpress站点配置为
Post name
Permalinks(我不想更改)。如果我将Wordpress的Permalinks设置更改为
Plain
,那么上面的NGINX配置似乎可以工作,但这仅仅是因为它有效地改变了URL的方式,因此没有路由参数,所有内容都变成了querystring参数。

问题在于,如何使用
try_files$uri$uri//home/index.php?$args/home/index.php?q=$1因为它在某些方面毫无意义

$1
在regex捕获组中使用,但在那里没有。因此,它确实永远是空的

$args
应与
$is_args
组合,如果没有参数,则解析为空字符串,否则为

只有一种事实上的标准结构适用于包括WordPress在内的许多CMS框架,如下所示:

try_files $uri $uri/ /index.php$is_args$args;
这适用于WordPress位于网站根目录中的情况

对于您的案例(位于
home
子目录中):

这应该足以将参数正确地传播到PHP中的
$\u GET
变量


如果您想优化此配置,出于性能原因,您可以查看。

您有
/var/www/html/home
的文档根,但您也希望在URL中包含
/home
?这也不是编程问题,因为它属于服务器配置问题。感谢您直接告诉我!
location = /home {
    return 301 /home/;
}
location /home/ {
    try_files $uri $uri/ /home/index.php$is_args$args;
}