web-dev-qa-db-fra.com

Admin-Ajax.php, SSL, Non-SSL

J'ai un site WordPress derrière un proxy inverse. Le site est sur http, à l'exception de la zone wp-admin, qui se trouve sous https. Nous n'avons pas BasicAuth ou quoi que ce soit en cours d'exécution au-dessus de la zone d'administration.

L'un de nos plugins frontaux échoue car il appelle depuis https: //admin-ajax.php depuis une page http frontale, et les navigateurs ne semblent pas aimer ce comportement. (Si cela compte, la chaîne de l'URL contient des noms)

Quel est le meilleur moyen d'autoriser les appels frontaux à admin-ajax.php? Dois-je rediriger tous les appels vers ce fichier de https vers http? Si oui, comment puis-je faire cela tout en exigeant que tous les autres fichiers sous/wp-admin soient sous https?

Toute suggestion serait très appréciée.

PS: Le code ci-dessous correspond à ce que nous avons actuellement dans wp-config:

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';
3
user64391

Je recommanderais de définir cette constante dans votre wp-config.php pour forcer HTTPS sur l'administrateur:

define('FORCE_SSL_ADMIN', true);

En outre, il existe une fonction appelée is_admin() qui pourrait être utile dans votre cas.

if ( is_admin() ) {
    $_SERVER['HTTPS'] = 'on';
}

Cependant, si une règle de votre serveur Web oblige toutes les demandes wp-admin et wp-login.php à s'exécuter via SSL, vous devrez ajouter une exception pour le fichier admin-ajax.php. Vous ne savez pas comment implémenter cela dans Apache, mais pour NGINX, le moyen le plus simple serait quelque chose comme:

if ($request_uri !~* "^/wp-admin/admin-ajax\.php") { rewrite "^/wp-(admin|login)" https://$Host$request_uri permanent; }

J'espère que cela t'aides!

1
Tiago Hillebrandt