反向代理后面的 WP – 循环中的 301 重定向 - Nginx

问题描述 投票:0回答:1

我正在尝试将来自旧 worpress 网站 https://old_wordpress_host.com/blog 的博客链接的所有流量转发/代理到新主机 https://new_wordpress_host.com/

old_wordpress_host.com.conf 上的代理的 nginx 块

location ^~ /blog {
    rewrite ^/blog(/.*)$ $1 break;
proxy_ssl_server_name on;
proxy_pass_request_headers on;
proxy_pass https://new_wordpress_host.com/;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
server_name_in_redirect off;

}

然后在新 WordPress new_wordpress_host.com 上的 WordPress wp-config.php 中

define('.COOKIE_DOMAIN.', 'old_wordpress_host.com');
define('.SITECOOKIEPATH.', '.');

if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
        $_SERVER['REMOTE_ADDR'] = $list[0];

        define('WP_SITEURL', 'https://old_wordpress_host.com/blog/');
        define('WP_HOME', 'https://old_wordpress_host.com/blog/');
        $_SERVER['HTTP_HOST'] = 'old_wordpress_host.com';
        $_SERVER['REMOTE_ADDR'] = 'https://old_wordpress_host.com';
        $_SERVER[ 'SERVER_ADDR' ] = 'old_wordpress_host.com';

        if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'){
                $_SERVER['HTTPS']='on';
        }
}
wordpress nginx nginx-reverse-proxy
1个回答
0
投票

无需在 Nginx 配置中重写规则,因为您正在使用 proxy_pass 处理路径。删除一次重写规则并再次检查

location ^~ /blog {
    proxy_ssl_server_name on;
    proxy_pass_request_headers on;
    proxy_pass https://new_wordpress_host.com/;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    server_name_in_redirect off;
}

在 wp-config.php 中,您尝试将 cookie 域和站点 URL 设置为旧主机,但它应该是新主机

define('COOKIE_DOMAIN', 'new_wordpress_host.com');
define('.SITECOOKIEPATH.', '.');

if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
        $_SERVER['REMOTE_ADDR'] = $list[0];

        $_SERVER['HTTP_HOST'] = 'new_wordpress_host.com';
        define('WP_SITEURL', 'https://new_wordpress_host.com/');
        define('WP_HOME', 'https://new_wordpress_host.com/');
        $_SERVER['REMOTE_ADDR'] = 'https://old_wordpress_host.com';
        $_SERVER[ 'SERVER_ADDR' ] = 'old_wordpress_host.com';

        if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'){
                $_SERVER['HTTPS']='on';
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.