Sujet : Problème de configuration du rewriting

Bonjour,

J'ai un gros problème pour l'url rewriting, je n'arrive pas à configurer le rewrite.

Mon url vers laquelle je pointe est : http://localhost/_iZite/Http_sites/Public/

Mon .htaccess ( http://localhost/_iZite/.htaccess ) est :

Options +FollowSymlinks

RewriteEngine On
RewriteBase /_iZite/

# Première solution.
#RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

#
# Routeur SITE WEB
#
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1

et mon bootstrap ( http://localhost/_iZite/Http_sites/Public/Index.php ) est :

$parameters = array(
    "route.type"                                        => "Rewrite",
    "route.parameter.base"                              => "/_iZite/Http_sites/Public",

    'controller.directory'  => 'hoa://Http_sites/Controller/',
    'model.share.directory' => 'hoa://Http_sites/Model/(:Controller)/',
    'view.directory'        => 'hoa://Http_sites/View/(:%view.theme:)/',

    "route.parameter.rules.default.pattern"             => "/(:action).html",
    "route.parameter.rules.default.default.module"      => "index",
    "route.parameter.rules.default.default.action"      => "index",

    "route.parameter.rules.complex.pattern"             => "/(:idSite)/(:action.html",
    "route.parameter.rules.complex.default.idSite"      => "1",
    "route.parameter.rules.complex.default.module"      => "index",
    "route.parameter.rules.complex.default.action"      => "index",
);

/******************************************************************************/


$controller = Hoa_Controller_Front::getInstance($parameters);
$controller->addRequest(0, $parameters);

Les problèmes sont les suivants :

Si je tape l'url -> http://localhost/_iZite/Http_sites/Public/

j'obtient cette erreur :

Warning: preg_match() [function.preg-match]: Compilation failed: missing ) at offset 24 in C:\wamp\www\_iZite\Framework\Library\Controller\Router\Rewrite.php on line 279

Warning: array_shift() [function.array-shift]: The argument should be an array in C:\wamp\www\_iZite\Framework\Library\Controller\Router\Rewrite.php on line 290
Hoa_Controller_Dispatcher_Abstract::dispatch: (0) Primary controller IndexController should be in the file hoa://Http_sites/Controller/Index.php, but this last is not found. in C:\wamp\www\_iZite\Framework\Library\Controller\Dispatcher\Abstract.php at 290. 
Attention, contrôleur non trouvé. Erreur 404 donc...

et si je tape cette adresse http://localhost/_iZite/Http_sites/Public/3/ j'obtient cette erreur :

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, admin@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Donc la un gros problème de reroutage.

Merci de m'aider j'en ai vraiment besoin.

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

2

Re : Problème de configuration du rewriting

Hey smile,

Tout d'abord, tu devrais placer ton .htaccess à la même racine que ton fichier d'amorçage. Ou alors il faut jouer avec la directive DocumentRoot d'Apache. Commence par tout faire pointer dans Public et revoir ta base d'URL (comme dans les exemples). Si tu as envie de modifier après, essaye. Mais commence par un cas où ça marchera de sûr.

Ensuite tu as fait une erreur dans tes règles :

"route.parameter.rules.complex.pattern" => "/(:idSite)/(:action.html"

Ce serait plutôt :

'route.parameter.rules.complex.pattern' => '/(:idSite)/(:action).html'

(j'ai remplacé les doubles guillemets par des doubles, performances et conventions/normes oblige).

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Re : Problème de configuration du rewriting

J'ai mis mon .htaccess dans mon dossier Public avec ma nouvelle base

RewriteBase /_iZite/Http_sites/Public

J'ai un peu changer le bootstrap :

$parameters = array(
    'route.type'                                        => 'Rewrite',
    'route.parameter.base'                              => '/_iZite/Http_sites/Public',

    'controller.directory'  => 'hoa://Http_sites/Controller/',
    'model.share.directory' => 'hoa://Http_sites/Model/(:Controller)/',
    'view.directory'        => 'hoa://Http_sites/View/(:%view.theme:)/',

    'route.parameter.rules.default.pattern'             => '/(:action).html',
    'route.parameter.rules.default.default.module'      => 'index',
    'route.parameter.rules.default.default.action'      => 'index',

    'route.parameter.rules.complex.pattern'             => '/(:idSite)/(:action).html',
    'route.parameter.rules.complex.default.idSite'      => '1',
    'route.parameter.rules.complex.default.module'      => 'index',
    'route.parameter.rules.complex.default.action'      => 'index',
);

/******************************************************************************/


$controller = Hoa_Controller_Front::getInstance($parameters);
$controller->addRequest(0, $parameters);

et mon erreur est un problème de rewriting car hoa:// n'a pas été affecté de la bonne base (enfin je pense)


Hoa_Controller_Dispatcher_Abstract::dispatch: (0) Primary controller IndexController should be in the file hoa://Http_sites/Controller/Index.php, but this last is not found. in C:\wamp\www\_iZite\Framework\Library\Controller\Dispatcher\Abstract.php at 290. 
Attention, contrôleur non trouvé. Erreur 404 donc...

Pour info je tourne sous windows wamp et mon host est localhost (de base)

Dernière fois dit par Ecureuil Virtuel (09 Mar. 2010 22:35)

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

Re : Problème de configuration du rewriting

Je tiens à rajouter que si je pointe vers http://localhost/_iZite/Http_sites/Public/toto. php (ou .html) les paramètres du controller sont :

Array
(
    [data.array] => Array
        (
            [action] => index
            [module] => index
        )

    [data.array.personal] => 
    [route.type] => Rewrite
    [route.parameter.default.module] => (:controller:)
    [route.parameter.default.action] => (:action:)
    [controller.class] => (:controller:U:)Controller
    [controller.file] => (:controller:U:).php
    [controller.directory] => ../../Http_sites/Controller/
    [action.class] => (:action:U:)Controller
    [action.method] => (:action:U:)Action
    [action.file] => (:action:U:).php
    [action.directory] => (:%controller.directory:)(:%controller.file:r:)/
    [model.share.directory] => ../../Http_sites/Model/(:Controller)/
    [model.directory] => (:%model.share.directory:)(:%controller.file:r:)/
    [view.theme] => (:view:U:)Theme
    [view.directory] => ../../Http_sites/View/(:%view.theme:)/
    [view.layout.file] => (:view.layout:U:).phtml
    [view.layout.enable] => 1
    [view.action] => (:controller:U:)/(:action:U:).phtml
    [route.parameter.base] => /_iZite/Http_sites/Public
    [route.parameter.rules.default.pattern] => /(:action).html
    [route.parameter.rules.default.default.module] => index
    [route.parameter.rules.default.default.action] => index
    [route.parameter.rules.complex.pattern] => /(:idSite)/(:action).html
    [route.parameter.rules.complex.default.idSite] => 1
    [route.parameter.rules.complex.default.module] => index
    [route.parameter.rules.complex.default.action] => index
)

Je devrai avoir avoir comme action " toto " donc cela remontre que le rewriting n'a pas fonctionné

Dernière fois dit par Ecureuil Virtuel (10 Mar. 2010 00:32)

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

5

Re : Problème de configuration du rewriting

Tu peux me montrer ton architecture ? Car normalement, pour l'URL hoa://, tu as 3 racines possibles : Application (qui nous intéresse), Data et Framework.
hoa://Application/ est censé pointer sur ton dossier d'application (étrange hein wink). J'aimerais donc voir comment tu as architecturé ça pour voir si ça correspond à la configuration par défaut. Sinon il va falloir modifier quelques chemins (rien de méchant).

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Re : Problème de configuration du rewriting

Mon architecture est la suivante :

Data/

Framework/

Http_sites/                                     (le générateur de site avec toutes les donnée des utilisateurs)
       Controller/
       Model/
       Public/
            index.php                             (Bootstrap - 'route.parameter.base' => '/_iZite/Http_sites/Public',)
            .htaccess                              (RewriteBase /_iZite/Http_sites/Public)
            js/
            css/
       View/

Http_extranet/                              (le back office des utilisateurs)
       Controller/
       Model/
       Public/
       View/

Http_store/                                    (la boutique)
       Controller/
       Model/
       Public/
       View/



/*************************************************************************************************/


J'ai rajouter un dossier Application par default

Application/                                     
       Controller/
       Model/
       Public/
            index.php                             (Bootstrap - 'route.parameter.base' => '/_iZite/Application/Public',)
            .htaccess                              (RewriteBase /_iZite/Application/Public)
       View/


dans mon bootstrap (application/Public/index.php), j'inclut :

set_include_path('./'       . PATH_SEPARATOR .
    './../../Data'          . PATH_SEPARATOR .
    './../../Application'   . PATH_SEPARATOR .
    './../../Framework'     . PATH_SEPARATOR .
    './../../Framework/Core'. PATH_SEPARATOR .
    get_include_path());

et les paramètres pour le controller sont :

$parameters = array(
    'route.type'                                        => 'Rewrite',
    'route.parameter.base'                              => '/_iZite/Application/Public',

    'controller.directory'  => 'hoa://Application/Controller/',
    'model.share.directory' => 'hoa://Application/Model/(:Controller)/',
    'view.directory'        => 'hoa://Application/View/(:%view.theme:)/',

    'route.parameter.rules.default.pattern'             => '/(:action).html',
    'route.parameter.rules.default.default.module'      => 'index',
    'route.parameter.rules.default.default.action'      => 'index',

    'route.parameter.rules.complex.pattern'             => '/(:idSite)/(:action).html',
    'route.parameter.rules.complex.default.idSite'      => '1',
    'route.parameter.rules.complex.default.module'      => 'index',
    'route.parameter.rules.complex.default.action'      => 'index',
);

/******************************************************************************/


$controller = Hoa_Controller_Front::getInstance($parameters);
$controller->addRequest(0, $parameters);

/*************************************************************************************************/


Mon erreur est :

Hoa_Controller_Dispatcher_Abstract::dispatch: (0) Primary controller IndexController should be in the file hoa://Http_sites/Controller/Index.php, but this last is not found. in C:\wamp\www\_iZite\Framework\Library\Controller\Dispatcher\Abstract.php at 290.


Merci de bien vouloir m'aider car je suis vraiment bloquer pour tout le développement et après tout ce temps passé sur mon appli je peux pas abandonner ! sad sad

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

Re : Problème de configuration du rewriting

Rectification :

C'est bon ça marche pour le dossier Application/.

J'ai super bien vérifié l'exactitude des informations pour les deux.

Le problème ne peut pas venir de toi ?? car dans mon dossier Http_sites/ l'erreur est :

Hoa_Controller_Dispatcher_Abstract::dispatch: (0) Primary controller IndexController should be in the file hoa://Http_sites/Controller/Index.php, but this last is not found. in C:\wamp\www\_iZite\Framework\Library\Controller\Dispatcher\Abstract.php at 290.

Dernière fois dit par Ecureuil Virtuel (11 Mar. 2010 00:29)

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

8

Re : Problème de configuration du rewriting

Réponse didacticiel activée smile.

Il suffit de dire que le chemin hoa://Application pointe vers Http_sites.
Plusieurs façons de faire :
• soit tu modifies les configurations du framework depuis Data/Etc/Configuration/ ;
• soit tu modifies les configurations du framework depuis ton fichier d'amorçage.

La première est impossible dans ton cas car la configuration est partagée pour toutes tes applications. Donc il faudrait redéfinir le chemin depuis ton fichier d'amorçage. Tu t'y prendrais de cette façon (il y en a plusieurs, je t'invite à regarder la configuration de Hoa_Framework) :

Hoa_Framework::getInstance()->setParameter(
    'root.application', '(:%root:h)' . DS . 'Http_sites'
);

En revanche, impossible d'aller d'une application à l'autre (de Http_sites à Http_extranet par exemple). Si tu ne veux pas naviguer entre les deux, cette solution est la plus sécurisée et la plus abstraite à mon sens. Tu utilises hoa://Application dans n'importe quel fichier de n'importe quelle application et c'est bon. Si tu renommes tes dossiers (Http_sites en Http_foobar par exemple), tu ne changes que le paramètre qu'on vient de redéfinir et ça roule, rien à retoucher, la magie opère.

Toutefois, si tu souhaites que les applications causent entre elles, c'est un poil plus compliqué. Il faut vraiment exploiter le protocole hoa://. Deux solutions s'offrent à toi.

La première consiste à définir hoa://Application comme la racine de tes applications. Ensuite tu accèdes à une application spécifique en ajoutant son nom au protocole : hoa://Application/Http_sites.
Soucis, on pourrait accéder à n'importe quoi d'autre (au dossier Data, car même racine). Donc il faudrait créer un dossier Applications, et placer tous les dossiers Http_* à l'intérieur. On dit que hoa://Application pointe vers Applications et le tour est joué.

Ce qui me conduit à la seconde solution est le problème suivant : si tu renommes un dossier (Http_sites en Http_foobar par exemple), tu perdras tous tes liens. Autant profiter de l'abstraction que nous propose le protocole hoa:// au maximum.
Donc l'idée est d'ajouter des composants à l'URL, qui symbolisent chacune de tes applications.

On reprend donc notre architecture (pour qu'elle soit plus logique) :

Data/
Framework/
Applications/
    Http_sites/
    Http_extranet/
    Http_foobar/

Dans les configurations du framework, on peut redéfinir hoa://Application pour tout le monde. Donc dans Data/Etc/Configuration/HoaFramework.json :

"root.application" : "(:%root:h:)/Applications", // on ajoute simplement un « s »

Je propose de le modifier ici car on ne veut pas le redéfinir dans chaque fichier d'amorçage.

Maintenant, on ajoute nos composants vers nos applications précises ; toujours dans Data/Etc/Configuration/HoaFramework.json pour que tout le monde en profite :

"protocol.Application/Main":       "(:%protocol.Application:)Http_sites/",
"protocol.Application/Backoffice": "(:%protocol.Application:)Http_extranet/",
"protocol.Application/Store":      "(:%protocol.Application:)Http_store/",

Ainsi on a abstrait l'ensemble de notre architecture. On y accèdera de cette façon :
• hoa://Application/Main/ … pour Http_sites ;
• hoa://Application/Backoffice/ … pour Http_extranet ;
• hoa://Application/Store/ … pour Http_store.

Wala M'sieur. Est-ce que ça te convient ?

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Re : Problème de configuration du rewriting

Un grand grand merci à toi pour cette réponse très clair et complète !!!!
J'essaye ça ce soir !!! big_smile

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

Re : Problème de configuration du rewriting

C'est bon merci ça marche niquel petite modif à ce que tu m'as dit :

Rajouter / entre "(:%protocol.Application:) et Http_sites/",

Bref un grand grand merci encore !!! je vais pouvoir enfin continuer et terminer ce que j'ai commencer big_smile
Je t'envoi la doc bientôt promis !!

Vive HOA !!!

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant