【问题标题】:WordPress's wp-admin panel weird behaviorWordPress wp-admin 面板奇怪的行为
【发布时间】:2017-06-27 00:49:48
【问题描述】:

我安装了一个官方的WP docker container。容器在 nginx 实例前面运行。

这是我注入容器的 .htaccess 文件:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
</IfModule>

Nginx 只是将/wp 代理到适当的路径。 问题如下: https://example.com/wp/https://example.com/wp/hello-post/ 工作正常。但是,一旦我尝试访问https://example.com/wp/wp-admin/,它就会一直将我重定向到https://example.com/wp-admin/,即忽略wp 子文件夹。我尝试使用.htaccess which comes by default - 完全相同的故事。

有什么想法吗?

【问题讨论】:

    标签: php wordpress .htaccess nginx docker


    【解决方案1】:

    这令人困惑!安装wp docker有什么用吗?看起来像一个缓存系统;但是我可以将您链接到更好的缓存组合。遇到您的问题,您将 WordPress 安装在子文件夹“/wp/”的什么位置?您的 wp-admin 被重定向回 example.com/wp-admin 的原因是因为在 wp_options 表中,您的 WP_SITEURL 和 WP_HOME 需要指向“http://example.com/wp/”而不是“http://example.com”。您可以更改它们而不只需编辑您的 wp-config.php 即可访问您的数据库 define('WP_HOME','http://example.com/wp/'); define('WP_SITEURL','http://example.com/wp/');

    【讨论】:

    • 感谢您的回复。但我已经在数据库中进行了更改......即将 home/siteurl 更改为指向 /wp。我还需要更改 wp-config 吗?
    • 现在告诉我您的 wordpress 是否安装在 /wp/ 文件夹中?如果是这样,那么您需要更改 .htaccess
    • 你的意思是把 Rewritebase 设置为 /wp?
    • 如果您想尝试,这是标准的 .htaccess:http://pastebin.com/8LLmqgh2
    • 我尝试了两种方式.. 两者都不起作用。此外,如果我指定 RewriteBase /wp/ - 并启用永久链接帖子名称选项,我将无法打开任何帖子 - 500 内部错误
    【解决方案2】:

    正如我在 github 上写给你的,容器似乎有问题。

    如果你检查容器 docker exec --interactive --tty your_container /bin/bash 和 cat /etc/apache2/apache2.conf 你会注意到

    这个问题可能是由于 apache2.conf 的配置造成的

    <Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    

    对于AllowOverride None.htaccess 文件将被忽略。

    【讨论】:

      【解决方案3】:
      1. 试试这个

        将您的 wordpress 安装放在 /var/www/html 内的 /wp 文件夹中

      2. 或者

      .htaccess

      # BEGIN WordPress
      # The directives (lines) between "BEGIN WordPress" and "END WordPress" are
      # dynamically generated, and should only be modified via WordPress filters.
      # Any changes to the directives between these markers will be overwritten.
      <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
      </IfModule>
      
      # END WordPress
      

      就我而言,这解决了问题。

      另外,检查我的 wp-config.php

      上的额外工作
      define('FS_METHOD', 'direct');
      define('FORCE_SSL_ADMIN', true);
      if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
          $_SERVER['HTTPS'] = 'on';
      }
      
      $_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/blog/wp-admin/",  $_SERVER['REQUEST_URI']);
      

      /blog/wp-admin/这里blog是子目录路径。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多