web-dev-qa-db-fra.com

JURI :: base () et hôtes virtuels - Réponses différentes?

J'ai un plugin qui fait des appels Ajax. Il construit un nom de domaine complet pour effectuer l'appel à l'aide de JURI :: base ().

Ce qui se passe, c'est parfois en utilisant www.somedomain.com, et d'autres fois en utilisant un nom d'hôte virtuel différent, www.somedomain.st.us.

www.somedomain.st.us possède un enregistrement CNAME dns qui pointe vers www.somedomain.com.

Vous pouvez voir un hôte (pas celui montrant le problème) à:

http://joomla.connectdaily.com/index.php/calendar

Cette page affiche un calendrier. Le code AJAX qui gère les clics sur la flèche de navigation) se situe autour de la ligne 189 du code source.

Le code PHP qui crée l'URL est:

public function getAjaxURL($addlParms=null){
  $result=$this->getSiteUrl().'index.php?option=com_ajax&plugin=connectdaily&group=content';
  if ($addlParms!=null) {
    $result.='&'.$addlParms;
  }
  return $result;
}

public function getSiteUrl() {
  $res=JURI::base();
  if (strpos($res,"/administrator/")>0) {
     $res=substr($res,0,strlen($res)-14);
  }
  return $res;
}

Parfois, getSiteURL () renvoie www.somedomain.com, et parfois (il semble aléatoire) il renvoie www.somedomain.st.us.

Quelqu'un at-il une expérience ou une connaissance à ce sujet? Un plugin ou un module peut-il changer la valeur renvoyée?

2
George Sexton

J'ai compris quel était le véritable problème ici. Pour des raisons de performances, mon code enregistre le contenu généré dans un cache local. Ainsi, la séquence des événements était la suivante:

L'utilisateur A demande: http://www.somedomain.st.us/calendar/ et reçoit le contenu qui est stocké dans le cache.

Requêtes de l'utilisateur B: http://www.somedomain.com/calendar/ et reçoit le contenu mis en cache généré pour l'utilisateur A avec un AJAX url de http : //www.somedomain.st.us .

Lorsque l'utilisateur B clique sur un contrôle, la demande AJAX échoue car elle est interdomaine.

Pour l'instant, je vais essayer d'utiliser l'URL relative pour AJAX. J'ai encouragé le client à cesser d'utiliser un hôte/CNAME virtuel pour www.somedomain.st.us et à configurer une redirection pour www.somedomain .st.us à www.somedomain.com.

1
George Sexton

Le meilleur moyen est d’utiliser JRoute qui se chargera de vous donner une bonne URL.

$url = JRoute::_('index.php?option=com_ajax&plugin=connectdaily&group=content', false, -1);
$url = str_replace('/administrator/', '/', $url);

S'il vous plaît noter le troisième paramètre de JRoute, il est donné intentionnellement pour obtenir le nom complet du site au lieu de l'URL relative. Vous pouvez omettre les 2ème et 3ème paramètres si vous ne voulez pas d'URL absolue.

2
Nagarjun