J'ai fraîchement installé un site WordPress et je l'ai configuré derrière un proxy inverse avec l'URL du site - http://example.com/hello
Je peux accéder à la page du tableau de bord de l'administrateur, mais je ne peux pas aller plus loin car le lien devient http://example.com/wp-admin
au lieu de http://example.com/hello/wp-admin
. Comment pourrais-je me débarrasser de ce comportement étrange?
http://example.com/hello
, j'ai même vérifié la table de base de données wp_options
.http://example.com/hello/wp-admin
.J'ai essayé de configurer le .htaccess
aussi, mais pas de chance.
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /hello
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /hello/index.php [L]
</IfModule>
# END WordPress
Finalement, j'ai trouvé la raison de ce comportement étrange.
Cela est dû à la présence de JavaScript dans wp_admin_canonical_url()
( https://developer.wordpress.org/reference/functions/wp_admin_canonical_url/ ).
L'URL est déterminé par ce morceau de code
$_SERVER['HTTP_Host'] . $_SERVER['REQUEST_URI']
où ce dernier renvoie wp-admin
au lieu de hello/wp-admin
.
En manipulant la valeur dans $_SERVER['REQUEST_URI']
, je peux réussir à obtenir le comportement correct dans le tableau de bord d'administration. Mais j'espère toujours une solution élégante sans toucher au code WordPress.
add_filter('set_url_scheme', 'hacky_uri_fix', 10, 2);
function hacky_uri_fix($url, $scheme) {
if ( $url === {{BAD ADMIN URL}} ) {
$url = {{CORRECT ADMIN URL}}
}
return $url
}
devrait fonctionner, remplacez simplement la mauvaise URL que vous essayez d'éviter par la bonne. Je suis sûr qu'il existe une meilleure solution à ce problème, mais je ne connais pas très bien les installations de sous-dossiers et cela devrait fonctionner sans toucher au code principal.