Bonjour,
J'ai plus ou moins fait le tour du tuto, et en local tout fonctionne bien. Par contre, lorsque j'ai uploadé chez un premier hébergeur (phpnet.org), il semble y avoir une incompatibilité, et le site est inaccessible si je ne tape pas en dure l'adresse avec webroot bref, pas ce que je cherche.

Je me suis alors tourné vers OVH, et au début tout fonctionne parfaitement, sauf que lorsque je clique sur une page par exemple http://mondomaine.fr/monsite/pages/view/accueil-1 la première fois tout fonctionne, mais si je clique à nouveau sur ce lien, il devient http://mondomaine.fr/monsite/webroot/pages/view/accueil-1, et ainsi de suite, les "/pages/" viennent s'intercaler, un de plus à chaque clic, pour donner ce genre de choses http://mondomaine.fr/monsite/webroot/pages/pages/pages/pages/pages/pages/view/accueil-1

Une idée du pourquoi? Problème de Router? autre? Merci de votre aide.

6 réponses


Ptitchef
Réponse acceptée

Salut,
Essayes de remplacer ta ligne d'origine dans ta page index par celle ci

define('BASE_URL', 'http://votre site.fr');

Voici mon code dans le fichier "webroot/index.php"

<?php
define('BEGIN_MICROTIME',microtime(true)); 
define('WEBROOT',dirname( __FILE__ )); 
define('ROOT',dirname(WEBROOT)); 
define('DS',DIRECTORY_SEPARATOR);
define('CORE',ROOT.DS.'core'); 
define('BASE_URL',rtrim(dirname(dirname($_SERVER'SCRIPT_NAME'])), '/\\'));

/**
 * Magic quotes
 **/
if(get_magic_quotes_gpc()) {
    $_POST = array_map('stripslashes', $_POST);
    $_GET = array_map('stripslashes', $_GET);
    $_COOKIE = array_map('stripslashes', $_COOKIE);
}
require CORE.DS.'includes.php'; 
new Dispatcher; 
?>

<u><strong>Explications:</strong></u>

Vérifier les Magic quotes qui dépende d'un serveur à l'autre et annuler les effets!

/**
 * Magic quotes
 **/
if(get_magic_quotes_gpc()) {
    $_POST = array_map('stripslashes', $_POST);
    $_GET = array_map('stripslashes', $_GET);
    $_COOKIE = array_map('stripslashes', $_COOKIE);
}

Eviter qu'un dirname() renvoie seulement un "/" ou "\" (cas présent depuis PHP 4.3.0)

define('BASE_URL',rtrim(dirname(dirname($_SERVER'SCRIPT_NAME'])), '/\\'));

Dans "core/Request.php" remplacer la ligne:

$this->url = isset($_SERVER'PATH_INFO'])?$_SERVER'PATH_INFO']:'/';

par:

/**
         *Définition du PATH_INFO
         **/
        if(isset($_SERVER'PATH_INFO']) && strlen($_SERVER'PATH_INFO'])){
            $_SERVER'PATH_INFO'] = $_SERVER'PATH_INFO'];
        }
        // a tricky way to set path info correctly at some sites
        elseif(isset($_SERVER'ORIG_PATH_INFO']) && $_SERVER'ORIG_PATH_INFO']) {
            // sometimes this is corrupted by CGI interface (e.g., 1and1) and ORIG_PATH_INFO takes the value of ORIG_SCRIPT_NAME
            if(isset($_SERVER'ORIG_SCRIPT_NAME']) && !strcmp($_SERVER'ORIG_PATH_INFO'], $_SERVER'ORIG_SCRIPT_NAME'])){

            }elseif(isset($_SERVER'SCRIPT_NAME']) && !strcmp($_SERVER'ORIG_PATH_INFO'], $_SERVER'SCRIPT_NAME'])){

            }else{
                $_SERVER'PATH_INFO'] = $_SERVER'ORIG_PATH_INFO'];
            }
        }
        $this->url = isset($_SERVER'PATH_INFO'])?$_SERVER'PATH_INFO']:'/';

Car certain hébergeur n'ont pas de variable PATH_INFO.

bonjour,
je viens de regarder et il semble que le coreRequest n'existe pas dans cakephp2.0

j'ai la même problème que vous.
please est il possible de m'indiquer quel sont les fichiers que vous avez modifié et qu'est ce que vous avez modifier exactement (m’indiquer la partie de code que vous avez ajouté ou supprimer ).
je suis bloqué à ce point depuis plus d'une semaine.
Merci d'avance.

A propos du PATH_INFO, il faut contrôler son existence dans un print_r du server, & faire attention au double directory seperator généré par les ORIG_PATH_INFO des serveurs mutualisés. Ainsi, ça allège le super code de POWANGE... Exemple :

$this->url = str_replace(DS.DS,DS,$_SERVER'ORIG_PATH_INFO']);

C'est bourrin, mais ça marche...