You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理WordPress出现间歇性Too Many Redirection问题求助

解决Nginx反向代理WordPress子目录的Too Many Redirections问题

这个问题我之前帮不少开发者踩过坑,核心就是缓存规则和反向代理的重定向逻辑撞车,再加上WordPress子目录配置的小细节没捋顺。咱们一步步来搞定:

先搞懂问题根源

你遇到的“时好时坏”是关键线索:

  • 当访问www.example.com/abc(不带尾斜杠)时,WordPress会自动重定向到带尾斜杠的/abc/,但如果Nginx把这个301/302重定向响应缓存了,后续请求就会直接返回缓存的重定向,时间久了就触发浏览器的“Too Many Redirections”限制;而缓存过期或没命中时,请求正常到达WordPress,就显示正常。
  • 另外,如果反向代理时没正确传递请求头(比如Host、X-Forwarded-Proto),WordPress会判断当前请求的URL和后台设置的站点URL不一致,也会触发循环重定向。

具体解决方案

1. 调整Nginx反向代理配置(核心)

直接在Nginx层面处理尾斜杠重定向,同时禁止缓存重定向响应,还要正确传递请求头给Apache/WordPress。把你原有的/abc相关location规则改成这样:

server {
    listen 80;
    server_name www.example.com;
    # 如果用HTTPS,记得补充listen 443 ssl;的配置

    # React静态内容的缓存配置(保留你原来的即可)
    location / {
        root /path/to/your/react/static/files;
        try_files $uri $uri/ /index.html;
        # 你的缓存规则...
    }

    # 处理/abc路径的反向代理
    location ~ ^/abc(.*)$ {
        # 禁止缓存重定向响应,从根源避免缓存导致的循环
        proxy_no_cache $upstream_cache_status;
        proxy_cache_bypass $upstream_cache_status;

        # 关键:传递正确的请求头给WordPress
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme; # 用HTTPS的话必须加这个!

        # 转发请求到Apache的地址(比如Apache跑在本地8080端口)
        proxy_pass http://127.0.0.1:8080/abc$1;

        # 提前在Nginx处理尾斜杠重定向,跳过WordPress的重定向逻辑
        rewrite ^/abc$ /abc/ permanent;
    }
}

解释下几个关键点:

  • rewrite ^/abc$ /abc/ permanent;:直接把不带尾斜杠的/abc重定向到/abc/,不让请求到达WordPress就完成重定向,避免后续的缓存问题。
  • proxy_no_cache和proxy_cache_bypass:确保WordPress返回的重定向响应不会被Nginx缓存,彻底杜绝缓存导致的循环。
  • X-Forwarded-Proto:如果你的站点用HTTPS,WordPress需要知道当前请求是HTTPS,否则会生成HTTP的URL,触发重定向循环。

2. 确认WordPress的配置

  • 登录WordPress后台,进入设置→常规,确保**站点地址(URL)和首页地址(URL)**都是https://www.example.com/abc/(注意带HTTPS和尾斜杠,和你的实际协议一致)。
  • 检查Apache上WordPress目录的.htaccess文件,确保重写规则是子目录的正确配置:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /abc/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /abc/index.php [L]
</IfModule>

这里的RewriteBase /abc/和最后一行的/abc/index.php必须准确,否则WordPress会生成错误的URL,导致重定向。

3. 清理缓存并验证

  • 清理Nginx的代理缓存(如果配置了proxy_cache),还有浏览器缓存。
  • 用命令测试:curl -I https://www.example.com/abc,应该返回301重定向到https://www.example.com/abc/;再访问https://www.example.com/abc/,返回200 OK,没有循环重定向。

这样调整后,就能彻底解决“有时正常有时重定向过多”的问题了。

内容的提问来源于stack exchange,提问作者Saurabh Srivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:24:57