Docker容器中的WordPress抛出带有Post标题永久链接的错误500



我正试图在一个子目录URL下托管WordPress博客,如:

https://example.com/blog

因为我在https://example.com/上运行了另一个应用程序所有东西都在Nginx反向代理下

为此,我创建了以下环境:

DockerCompose.yml

# docker-compose.yml
version: '3'
services:
wordpress_seo:
image: wordpress
restart: always
ports:
- 8094:80
environment:
WORDPRESS_DB_HOST: db-wordpress_seo
WORDPRESS_DB_USER: ${MYSQL_WORDPRESS_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_WORDPRESS_PASSWORD}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}-wordpress
volumes:
- ${STORAGE_PATH}/wordpress:/var/www/html
networks:
- env-dev
db-wordpress_seo:
image: mariadb:10.1.41
restart: always
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}-wordpress
MYSQL_USER: ${MYSQL_WORDPRESS_USER}
MYSQL_PASSWORD: ${MYSQL_WORDPRESS_PASSWORD}
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- ${STORAGE_PATH}/wordpress-data:/var/lib/mysql
networks:
- env-dev
networks:
env-dev:
external:
name: env-dev

在我的服务器Nginx-config:中使用此配置

location /blog/ {
proxy_pass http://127.0.0.1:8094/;
proxy_http_version 1.1;
proxy_buffering off;
proxy_read_timeout    90;
proxy_connect_timeout 90;
proxy_redirect        off;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Proxy "";
}

然后我修改了wp-config.php,添加了以下内容:

define('WP_HOME','https://example.com/blog');
define('WP_SITEURL','https://example.com/blog');
if (strpos($_SERVER['REQUEST_URI'], '/blog/wp-admin/') === false) {
$_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/blog/wp-admin/",  $_SERVER['REQUEST_URI']);
}// If we're behind a proxy server and using HTTPS, we need to alert WordPress of that fact
// see also https://wordpress.org/support/article/administration-over-ssl/#using-a-reverse-proxy
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
$_SERVER['HTTPS'] = 'on';
}

安装进行得很顺利,我可以使用这种永久链接访问文章:

https://example.com/blog/?p=1

然而,我现在想使用帖子标题永久链接。因此,当我在WordPress配置面板中切换时,帖子会突然抛出500个错误,例如,如果我访问以下URL:

https://example.com/blog/bonjour-tout-le-monde/

我在我的容器中检查了.htaccess文件,它似乎很好:

# BEGIN WordPress
# Les directives (lignes) entre « BEGIN WordPress » et « END WordPress » sont générées
# dynamiquement, et doivent être modifiées uniquement via les filtres WordPress.
# Toute modification des directives situées entre ces marqueurs sera surchargée.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /freelance/
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /freelance/index.php [L]
</IfModule>
# END WordPress

当我在激活了大量详细信息的WordPress容器中检查日志时,我会得到以下信息(我删除了一些部分,因为这只是一个重复模式(:

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
r->uri = /blog/index.php, referer: https://example.com/blog/wp-admin/edit.php
redirected from r->uri = /blog/index.php, referer: https://example.com/blog/wp-admin/edit.php
redirected from r->uri = /blog/index.php, referer: https://example.com/blog/wp-admin/edit.php
redirected from r->uri = /blog/index.php, referer: https://example.com/blog/wp-admin/edit.php
redirected from r->uri = /blog/index.php, referer: https://example.com/blog/wp-admin/edit.php
redirected from r->uri = /blog/index.php, referer: https://example.com/blog/wp-admin/edit.php
redirected from r->uri = /blog/index.php, referer: https://example.com/blog/wp-admin/edit.php
redirected from r->uri = /blog/index.php, referer: https://example.com/blog/wp-admin/edit.php
redirected from r->uri = /blog/index.php, referer: https://example.com/blog/wp-admin/edit.php
redirected from r->uri = /blog/index.php, referer: https://example.com/blog/wp-admin/edit.php
redirected from r->uri = /bonjour-tout-le-monde/, referer: https://example.com/blog/wp-admin/edit.php
Response sent with status 500, referer: https://example.com/blog/wp-admin/edit.php

你知道这个bug是从哪里来的吗?

对于那些想知道解决方案是什么的人,你必须编辑wordpress的.htaccess文件,并覆盖wordpress自动生成的规则。

这是我现在的.htaccess文件:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /blog/
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# BEGIN WordPress
# Les directives (lignes) entre             BEGIN WordPress             et             END WordPress             sont g      n      r      es
# dynamiquement, et doivent       tre modifi      es uniquement via les filtres WordPress.
# Toute modification des directives situ      es entre ces marqueurs sera surcharg      e.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /blog/
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress

最新更新