WordPress的wp-admin面板奇怪的行为

时间:2017-02-09 06:11:05

标签: php wordpress .htaccess nginx docker

我安装了一名官员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 - 完全相同的故事。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

这令人困惑!安装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/');

答案 1 :(得分:0)

正如我在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文件将被忽略。

答案 2 :(得分:0)

  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是子目录路径。