配置Nginx适配WordPress与NextJS前端时/wp-admin页面出现重定向循环问题求助
嘿,我仔细看了你的Nginx配置和curl输出,这个重定向循环问题其实是Nginx规则和WordPress的URL处理配合出了问题,咱们一步步来拆解解决:
问题根源分析
从你提供的curl输出能看到核心线索:
< x-redirect-by: WordPress
< location: https://mydomain.ee/wordpress/wp-admin/
不管是访问不带尾斜杠的/wordpress/wp-admin还是带尾斜杠的/wordpress/wp-admin/,都是WordPress在发起重定向,而且第二次访问带尾斜杠的地址时还循环重定向到自身。这说明WordPress接收到的请求路径信息异常,导致它一直认为当前URL不符合预期,不断触发重定向逻辑。
具体来看你的Nginx配置,/wordpress location里的try_files规则有明显问题:
try_files $uri $uri/wordpress/ /wordpress/index.php$is_args?$args;
当请求/wordpress/wp-admin时,$uri的值是/wordpress/wp-admin,这时候规则会尝试访问不存在的路径/var/www/wordpress/wp-admin/wordpress/(因为root是/var/www),直接落到index.php处理,但传递给WordPress的请求路径已经混乱,进而引发重定向循环。
解决方案
1. 修正Nginx的/wordpress location配置
把错误的try_files规则调整,并优化FastCGI参数传递,确保WordPress能拿到正确的请求信息:
location /wordpress { root /var/www; # 修正try_files:先尝试文件→尝试目录(带尾斜杠)→交给index.php处理 try_files $uri $uri/ /wordpress/index.php$is_args$args; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 适配/wordpress前缀的路径拆分规则 fastcgi_split_path_info ^(/wordpress/.+\.php)(/.+)$; # 确保PHP脚本路径指向正确 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 强制传递完整请求URI,避免WordPress识别错误 fastcgi_param REQUEST_URI $request_uri; include snippets/fastcgi-php.conf; fastcgi_buffers 1024 4k; fastcgi_buffer_size 128k; } }
修改完成后重启Nginx生效:
sudo systemctl restart nginx
2. 确认WordPress的站点URL配置
通过/wordpress/wp-admin/index.php登录后台,进入「设置→常规」,检查以下两项是否都设置为:https://mydomain.ee/wordpress
如果不一致,修改后保存。
3. 可选:强制WordPress识别HTTPS与正确URL
如果还是存在问题,可以在WordPress的wp-config.php文件末尾添加以下代码,强制指定站点URL并确保WordPress识别HTTPS请求(适配Nginx反向代理的场景):
define('WP_HOME','https://mydomain.ee/wordpress'); define('WP_SITEURL','https://mydomain.ee/wordpress'); define('FORCE_SSL_ADMIN', true); // 识别Nginx传递的HTTPS协议头 if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) { $_SERVER['HTTPS'] = 'on'; }
总结
核心问题是Nginx的try_files规则错误导致请求路径传递混乱,加上WordPress对URL的严格校验,共同引发了重定向循环。按照上面的步骤调整后,应该就能正常访问/wordpress/wp-admin了。
备注:内容来源于stack exchange,提问作者OdifYltsaeb

