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

Docker部署Nginx+WordPress6 自定义友好固定链接报500错误

问题根因

自定义固定链接失效、文章页返回500、后台无法更新内容的核心原因有两点:

  • 反向代理路径转发逻辑错误:当前/blog2/路径块的proxy_pass配置带尾部斜杠,Nginx会把请求路径中的/blog2前缀完全剥离后再转发给WordPress容器。比如访问/blog2/foo-bar/时,实际转发到上游WordPress的路径是/foo-bar/,WordPress无法匹配到对应路由,也没有触发重写规则,直接返回500错误。默认带ID的固定链接是?p=数字ID的查询参数形式,不依赖路径匹配,所以可以正常运行。
  • 缺少子路径部署必需的配置:你把WordPress部署在/blog2子路径下,但既没有给WordPress指定子目录的站点地址,也没有配置对应的重写规则把自定义路径转发到index.php入口,自定义固定链接的路由逻辑完全不生效。
修复步骤

1. 更新docker-compose配置,给WordPress指定子路径地址

在docker-compose.yml的wordpress服务environment段新增配置,明确告诉WordPress它的访问基路径是/blog2:

wordpress:
    container_name: 'wp'
    depends_on:
        - wordpress_db
    image: wordpress:6.0-php7.4-apache
    restart: always
    environment:
        WORDPRESS_DB_HOST: wordpress_db
        WORDPRESS_DB_USER: wpu
        WORDPRESS_DB_PASSWORD: ****
        WORDPRESS_DB_NAME: wp
        # 新增以下配置
        WORDPRESS_CONFIG_EXTRA: |
            define('WP_HOME', 'http://domain.tld/blog2');
            define('WP_SITEURL', 'http://domain.tld/blog2');
    networks:
        - main-site-network
    volumes:
        - wordpress_data:/var/www/html

修改完成后在docker-compose.yml所在目录执行以下命令重启WordPress容器让配置生效:

docker-compose up -d wordpress

2. 修正Nginx配置

替换原来nginx.conf中server块内的location配置,修复代理路径、重写规则、后台跳转问题:

server {
    listen *:80 default_server;
    server_name domain.tld;

    gzip on;
    gzip_min_length 4096;
    gzip_buffers 32 128k;
    gzip_types text/plain text/js text/css text/javascript application/javascript application/x-javascript application/json text/xml;

    add_header X-Content-Type-Options "nosniff";
    add_header Strict-Transport-Security max-age=31536000;

    client_max_body_size 500m;

    # 修复后台跳转:匹配所有wp开头的路径(含wp-admin、wp-login.php、静态资源目录),避免漏匹配
    location ~ ^/wp- {
        return 307 https://$server_name/blog2$request_uri;
    }

    location /blog2/ {
        # 注意:proxy_pass不要加尾部斜杠,保留/blog2前缀转发给上游
        proxy_pass http://wordpress:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-NginX-Proxy true;
        
        # 核心重写规则:把所有自定义固定链接路径转给index.php入口
        rewrite ^/blog2/(.*)$ /blog2/index.php?q=$1 last;
    }

    # 可选:访问/blog2时自动跳转到博客首页
    location = /blog2 {
        return 301 /blog2/;
    }
}

修改完成后执行以下命令重启Nginx加载新配置:

docker-compose restart nginx

3. 重新保存固定链接规则

登录WordPress后台,进入固定链接设置页,重新选择你需要的/%postname%或/%postname%.html结构,点击「保存更改」,WordPress会自动更新内部重写规则。

验证标准

修复完成后按以下顺序确认功能正常:

  • 访问http://domain.tld/blog2/,文章列表加载正常,无静态资源404
  • 点击任意文章进入详情页,自定义别名路径正常访问,不返回500错误
  • 后台编辑、发布、更新文章操作正常,无报错
  • 访问wp-admin后台跳转正常,页面样式加载正常

如果你后续启用HTTPS,记得把之前配置的WP_HOME、WP_SITEURL地址改成https开头,避免出现混合内容报错。


内容的提问来源于stack exchange,提问作者Никита Середа

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:27:14