web-dev-qa-db-fra.com

URL wp-admin incorrecte

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

Problème

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?

Des détails qui pourraient aider ...

  1. Je suis tout à fait sûr que l'adresse WordPress (URL) et l'adresse du site (URL) sont configurées en tant que http://example.com/hello, j'ai même vérifié la table de base de données wp_options.
  2. Lorsqu'il arrive sur la page du tableau de bord de l'administrateur avec le code CSS correct, le navigateur affiche le lien correct pendant une demi-seconde et passe soudainement au mauvais. J'ai même vérifié le journal de réseau dans Chrome et Firefox. L'URL demandée est http://example.com/hello/wp-admin.
  3. 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
    
1
Victor Wong

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.

3
Victor Wong
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.

0
mrben522