PHP Wordpress和Nginx配置
我的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
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;
}