我正在尝试将来自旧 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';
}
}
无需在 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';
}
}