我安装了一名官员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 - 完全相同的故事。
有什么想法吗?
答案 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)
试试这个
将您的 wordpress 安装放在 /var/www/html 内的 /wp 文件夹中
或者
.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是子目录路径。