web-dev-qa-db-fra.com

Wordpress get_template_directory_uri () renvoie http au lieu de https

Nous avons récemment appliqué le certificat SSL sur notre site Web et nous souhaitons que toutes nos URL aient un protocole https: //. 

Une fois que nous avons déplacé notre site Web vers https: //, notre site Web est tombé en panne car peu de ressources indiquaient encore http: //. Après des recherches pendant un certain temps, j'ai constaté que get_template_directory_uri () renvoie toujours http: // même par l'intermédiaire de notre wp_home, wp_site_url est défini avec https: //.

Y a-t-il un autre endroit où nous devons changer l'URL, car nous utilisons un thème enfant et cette fonction récupère le répertoire du thème parent.

Merci, Raju Vishwas

12
Raju Vishwas

Vérifiez la valeur $_SERVER['HTTPS']. Cela devrait être défini sur on ou 1. Si elle a une autre valeur lors de la définition, cette fonction affichera http plutôt que https.

Voir: https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-includes/functions.php#L4025

8
pbond

voir les notes de link https://codex.wordpress.org/Function_Reference/is_ssl

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';
2
Roberto Poblete

En passant par ce commentaire l'initiateur a ajouté:

dans mon cas, nous utilisions le serveur Load Balancer et le certificat SSL était installé sur l'équilibreur de charge

La réponse de @pbond indique que la surface est à l'origine du problème. La fonction WordPress is_ssl() vérifie les $ _SERVER ['HTTPS'] et $ _SERVER ['SERVER_PORT'] pour vérifier si la page en cours est en cours d’accès via https, mais l’équilibreur de charge demande probablement votre contenu sur une page non SSL. port 80.

Une bonne solution consiste à utiliser l'en-tête HTTP X-Forwareded-Proto pour déterminer le protocole que le client utilise réellement de l'autre côté de Load Balancer.

Avec Apache 2.2, vous pouvez ajouter ceci à votre configuration:

<IfModule mod_setenvif.c>
  SetEnvIf X-Forwarded-Proto "^https$" HTTPS
</IfModule>

Une autre solution possible (évoquée par @Roberto Poblete mais non expliquée) consiste à ajouter ceci à wp-config.php

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';

J'ai ceci à remercier de m'avoir envoyé dans le bon direct

2
kakoma

Avez-vous essayé de forcer la livraison du contenu via https avec un fichier .htaccess modifié?

ci-dessous l'extrait que j'utilise:

#Force HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
0
funkysoul

Vérifiez la liste des plugins installés. Tout plugin impliquant la mise en cache, CDN, etc. peut interférer avec get_template_directory_uri. Dans notre cas, le client avait installé une tonne de plugins pour accélérer soi-disant son site. 

Avec aucun plugin activé https chargé bien. Il s’agissait donc simplement de déterminer lequel. Et enfoui dans les paramètres du plug-in incriminé, il y avait une version http du chemin du site.

0
hawbsl