WordPress,nginx代理和子目录:wp-login.php重定向到域


WordPress, nginx proxy and subdirectory: wp-login.php redirects to domain

在我的NGINX配置中,WordPress博客位于私人服务器上。我的NGINX公共服务器代理的私有服务器的内容https://www.example.com/blog/

location ^~ /blog/ {    # A "subdirectory", hiding a proxied server
    proxy_pass              http://192.168.0.5:80/;    # The blog resides in the 
                                                       # private's web root, 
                                                       # not in a subdirectory
    proxy_set_header        Host $host;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_redirect          off;
}

博客在调用域和子目录时表现得非常完美。打开wp登录不会生成重定向GET字段。

https://www.example.com/blog/wp-login.php

我的siteurl和home变量都设置为带有子目录的域。

然而,在成功登录后,我可能会看到仪表板,但浏览器中的URL会被重写为https://www.example.com/wp-admin,导致在使用仪表板时出现问题。

尽管博客在代理的私人服务器上,但我如何配置WP将URL重写到子目录?

(服务器中的子目录必须对称吗?)

我也遇到过同样的问题,我找到了一个解决方法,为了解决这个问题,将以下代码添加到wp-config.php

$_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/blog/wp-admin/",  $_SERVER['REQUEST_URI']);
WordPress使用两个变量来定义它的托管位置:WP_HOMEWP_SITEURL。两者都可以使用仪表板进行设置,但我更喜欢在wp-config.php:中进行设置
define( 'WP_SITEURL', 'https://www.example.com/blog' );
define( 'WP_HOME', 'https://www.example.com/blog' );

通常设置一个绝对URL(如上所述),其中包括方案和主机名,但当在反向代理后面操作时,我更喜欢使用相对URL,如下所示:

define( 'WP_SITEURL', '/blog' );
define( 'WP_HOME', '/blog' );

你可能可以继续在你的私人服务器的根目录中运行WordPress(假设它不是直接访问的)。将私有服务器向下移动一个级别会稍微复杂一些,并且需要稍微更改两个服务器上的web服务器配置。

您必须在wp-config.php中添加以下两个重写:

$_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/blog/wp-admin/",  $_SERVER['REQUEST_URI']);
$_SERVER['REQUEST_URI'] = str_replace("/wp-login.php", "/blog/wp-login.php", $_SERVER['REQUEST_URI']);

第一个修复了所有的管理页面。密码重置流程所需的第二个。

我发现4年前密码重置流程存在一个开放的TRAC问题,因此在可预见的未来,我们似乎必须继续采取这些解决方案。Wordpress似乎不希望大多数人都在反向代理后面运行。