【问题标题】:Can’t access admin when WordPress is in a subfolderWordPress 在子文件夹中时无法访问管理员
【发布时间】:2019-10-19 18:06:29
【问题描述】:

我使用this Docker image 安装了 WordPress。我将 WordPress 安装在子文件夹 (https://thibault.vlacich.fr/blog) 中。

我正在使用 Traefik 进行路由。这是我的 docker-compose 文件:

version: '3.7'

networks:
  http_network:
    external: true
  thibaultvlacich:
    external: false

services:
  database:
    image: mariadb:latest
    command: ['--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--default-authentication-plugin=mysql_native_password']
    volumes:
      - .docker/data/db:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    networks:
      - thibaultvlacich

  wordpress:
    depends_on:
      - database
    image: wordpress:latest
    volumes:
      - ./wordpress/wp-content:/var/www/html/wp-content
    environment:
      WORDPRESS_DB_HOST: database:3306
      WORDPRESS_DB_USER: ${MYSQL_USER}
      WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
      WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
    labels:
      - traefik.enable=true
      - traefik.frontend.rule=Host:thibault.vlacich.fr;PathPrefix:/blog;PathPrefixStrip:/blog
      - traefik.port=80
      - traefik.docker.network=http_network
    networks:
      - thibaultvlacich
      - http_network

一切正常,除了管理员。当我转到https://thibault.vlacich.fr/blog/wp-admin 时,我被重定向到https://thibault.vlacich.fr/wp-admin,然后无法访问管理员。

知道如何解决这个问题吗? (WP_HOME 和 WP_SITEURL 都正确设置为https://thibault.vlacich.fr/blog

【问题讨论】:

  • 我遇到了这个确切的问题...关注。

标签: wordpress docker-compose traefik


【解决方案1】:

我遇到了和你完全相同的问题。我已经断断续续地进行了数周的故障排除,为了解决这个问题,我失去了一半的头发。我想我终于想通了。

在 ./wordpress/wp-content 中创建一个名为 blog 的目录,并将所有数据移入其中。然后让你的 docker compose 看起来像

version: '3.7'

networks:
  http_network:
    external: true
  thibaultvlacich:
    external: false

services:
  database:
    image: mariadb:latest
    command: ['--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--default-authentication-plugin=mysql_native_password']
    volumes:
      - .docker/data/db:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    networks:
      - thibaultvlacich

  wordpress:
    depends_on:
      - database
    image: wordpress:latest
    volumes:
      - ./wordpress/wp-content:/var/www/html/wp-content
    environment:
      WORDPRESS_DB_HOST: database:3306
      WORDPRESS_DB_USER: ${MYSQL_USER}
      WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
      WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
    labels:
      - traefik.enable=true
      - traefik.frontend.rule=Host:thibault.vlacich.fr;PathPrefix:/blog
      - traefik.port=80
      - traefik.docker.network=http_network
    working_dir: /var/www/html/wp-content/blog
    networks:
      - thibaultvlacich
      - http_network

现在它有一个奇怪的怪癖,我认为你不会有问题,因为你已经启动并运行了。当您第一次配置 wordpress 站点时,您必须转到 https://thibault.vlacich.fr/blog/blog 才能完成安装过程。完成后,您应该可以转到https://thibault.vlacich.fr/blog 并正常访问它。我遇到了同样的问题, /blog/wp-admin 会重定向删除 /blog 而现在我没有。如果这不起作用,请告诉我,我将发布我的 docker-compose.yml 文件,您可以修改您的文件以匹配。

【讨论】:

    【解决方案2】:

    我在 docker-compose 中发现了这个配置。 只需将所有内容都放在 /var/www/html/SUBFOLDER_NAME 的子文件夹下 它解决了 /wp-admin.php 页面的重定向问题。

    以下是 wordpress 的 docker-compose 部分,我的 SUBFOLDER_NAME 为“博客”。

    ### Wordpress ###########################################
    wordpress:
      image: wordpress:latest
      restart: always
      environment:
        WORDPRESS_DB_HOST: mysql
        WORDPRESS_DB_USER: root
        WORDPRESS_DB_PASSWORD: root
        WORDPRESS_DB_NAME: test
        WORDPRESS_CONFIG_EXTRA: 
          |
          define ( 'WP_SITEURL', 'http://localhost/blog' );
          define ( 'WP_HOME', 'http://localhost/blog' );
      volumes:
        - ./wordpress/blog:/var/www/html/blog
      depends_on:
        - mysql
      networks:
        - frontend
        - backend
      working_dir: /var/www/html/blog
      labels:
        - traefik.enable=true
        - traefik.frontend.rule=Host:localhost;PathPrefix:/blog
        - traefik.port=80
    

    【讨论】:

      【解决方案3】:

      您好,我的 Traefik V2 解决方案

      version: '3'
      
      services:
        db:
          image: mysql:8.0
          container_name: blog_db
          restart: always
          env_file: .env
          environment:
            - MYSQL_DATABASE=blog
          volumes:
            - dbdata:/var/lib/mysql
          command: '--default-authentication-plugin=mysql_native_password'
          networks:
            - app-network
      
        wordpress:
          depends_on:
            - db
          build: .
          container_name: wordpress
          restart: always
          environment:
            WORDPRESS_DB_HOST: blog_db:3306
            WORDPRESS_DB_USER: $MYSQL_USER
            WORDPRESS_DB_PASSWORD: $MYSQL_PASSWORD
            WORDPRESS_DB_NAME: blog
      
          volumes:
            - ./wordpress:/var/www/html/blog
          networks:
            - app-network
            - proxy
          labels:
            - "traefik.enable=true"
            - "traefik.docker.network=proxy"
            - "traefik.http.routers.blog.entrypoints=websecure"
            - "traefik.http.routers.blog.rule=(Host(`example.com`) && PathPrefix(`/blog{regex:$$|/.*}`))"
            - "traefik.http.routers.blog.priority=10"
            - "traefik.http.services.blog.loadbalancer.server.port=80"
            - "traefik.http.routers.blog.tls=true"
            - "traefik.http.routers.blog.tls.certresolver=cloudflare"
      
      
      
      volumes:
        dbdata:
      
      networks:
        app-network:
          driver: bridge
        proxy:
          external: true
      

      【讨论】:

        【解决方案4】:

        一个可能的解决方案:

        使用它来撰写: 将 SOME_LOCAL_IN_YOUR_SERVER 更改为服务器中的路径和内部的 mkdir 2 文件夹(db 和 wpdata)

        version: '3'
            
        services:
               db:
                 image: mysql:5.7
                 volumes:
                   - /SOME_LOCAL_IN_YOUR_SERVER/db:/var/lib/mysql
                 networks:
                   - wordpress
                 environment:
                   MYSQL_ROOT_PASSWORD: somewordpress
                   MYSQL_DATABASE: wordpress
                   MYSQL_USER: wordpress
                   MYSQL_PASSWORD: wordpress
               wordpress:
                 depends_on:
                   - db
                 image: wordpress:latest
                 environment:
                   WORDPRESS_DB_HOST: db:3306
                   WORDPRESS_DB_USER: wordpress
                   WORDPRESS_DB_PASSWORD: wordpress
                 volumes:
                    - /SOME_LOCAL_IN_YOUR_SERVER/wpdata:/var/www/html 
                 networks:
                    - traefik-public
                    - wordpress
                 labels:
                        - 'traefik.enable=true'
                        - 'traefik.docker.network=traefik-public'
                        - 'traefik.http.routers.blog.rule=Host(`your.site.com`) && PathPrefix(`/blog`)'
                        - 'traefik.http.routers.blog.entrypoints=websecure' 
                   
            volumes:
                db_data:
                
            networks:
                traefik-public:
                   external: true
                wordpress:
        

        撰写以在 wpdata 目录中填充 wp 数据

        进入wpdata文件夹:

        cd /SOME_LOCAL_IN_YOUR_SERVER/wpdata
        

        编辑 wp-config.php 并插入这两行:

        define('WP_HOME','your.site.com/blog');
        define('WP_SITEURL','your.site.com/blog');
        

        在 wpdata 中创建博客目录:

        mkdir blog
        

        将wpdata中的所有内容复制到wpdata/blog:

        cp * -R blog/
        

        编辑 index.php(在 wpdata 目录中,而不是博客目录版本)

        require( dirname( __FILE__ ) . '/wp-blog-header.php' );
        must be:
        require( dirname( __FILE__ ) . '/blog/wp-blog-header.php' );
        

        基于:https://blog.sakuragawa.moe/containerized-wordpress-from-sub-directory/https://wordpress.org/support/article/giving-wordpress-its-own-directory/#method-ii-with-url-change

        【讨论】:

        • 如果您有权限问题:chmod 755 -R blog/ 和 chown -R www-data:www-data blog/
        【解决方案5】:

        或者,您可以在不创建子文件夹的情况下尝试此操作。尝试在 wp-config.php

        中添加以下行
        $_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/blog/wp-admin/",  $_SERVER['REQUEST_URI']);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多