在我的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']);
WP_HOME
和WP_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似乎不希望大多数人都在反向代理后面运行。