WordPress+fly.io部署:不同站点URL+固定首页+Postname permalink引发重定向循环
这个问题我之前帮不少开发者排查过,核心是WordPress的重定向逻辑和fly.io的反向代理配置没匹配上——当你把站点地址(example.com)和WordPress后台地址(wp.example.com)分开设置,又启用了Postname永久链接+固定首页时,很容易触发双向重定向循环。下面是针对性的解决步骤:
1. 强制WordPress识别正确的域名与路径
打开你的wp-config.php文件,添加以下配置代码,确保WordPress能正确区分后台和前台域名,避免自动重定向错误:
// 固定后台与前台地址 define('WP_HOME', 'http://wp.example.com'); define('WP_SITEURL', 'http://example.com'); // 确保Cookie绑定到前台域名,避免会话冲突 define('COOKIE_DOMAIN', 'example.com'); define('COOKIEPATH', '/'); // 强制重写规则的基础路径 define('WP_REWRITE_BASE', '/');
如果后续切换到HTTPS,记得把http改成https,并添加define('FORCE_SSL_ADMIN', true);。
2. 配置fly.io的反向代理传递正确请求头
fly.io作为反向代理,需要把真实的请求域名和协议传递给WordPress,否则WordPress会误以为请求来自wp.example.com,进而触发重定向到example.com,形成循环。
如果你用的是自定义Nginx镜像,在Nginx配置里添加这些代理头:
location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://wp.example.com; // 这里指向你的WordPress服务器地址 }
如果用的是fly.io官方的WordPress模板,在fly.toml的[http_service]下添加配置,确保Host头被正确转发:
[http_service] internal_port = 80 force_https = false # 若用HTTPS则设为true auto_stop_machines = true auto_start_machines = true min_machines_running = 0 processes = ["app"] [[services.http_checks]] path = "/" protocol = "http" port = "80" interval = 10000 timeout = 2000 grace_period = "5s" restart_limit = 0
3. 重新生成永久链接规则
登录WordPress后台,进入设置 → 永久链接,不需要修改任何选项,直接点击「保存更改」。这一步会让WordPress重新生成适配当前域名的重写规则,覆盖旧的冲突配置。
如果你的环境用的是Nginx而非Apache,还需要手动确保Nginx的重写规则正确:
location / { try_files $uri $uri/ /index.php?$args; }
4. 检查固定首页的配置
进入设置 → 阅读,确认你设置的静态首页对应的页面,其 permalink 是基于example.com生成的(比如example.com/home),而非wp.example.com/home。如果页面的URL还是指向后台域名,编辑页面并重新保存一次,让WordPress更新其链接地址。
5. 清除所有缓存
最后,清除浏览器的缓存和Cookie,同时如果你的WordPress安装了缓存插件(比如WP Rocket、W3 Total Cache),也需要清空插件缓存——旧的重定向规则可能会被缓存下来,导致问题持续存在。
内容的提问来源于stack exchange,提问作者Nick Welsh

