Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-10-2008 16:54:25

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

[résolu] Installation & .htaccess

Bonjour, je ne comprends pas très bien les règles htaccess du Quickstart :

L.1 RewriteEngine On
L.2 RewriteCond %{REQUEST_FILENAME} -s [OR]
L.3 RewriteCond %{REQUEST_FILENAME} -l [OR]
L.4 RewriteCond %{REQUEST_FILENAME} -d
L.5 RewriteRule ^.*$ - [NC,L]
L.6 RewriteRule ^.*$ index.php [NC,L]

Que signifie la ligne 5 ?
La ligne 2 avec l'option -s conditionne les requêtes à destinations des fichiers, je ne vois pas à quel endroit la différence est faite entre les fichiers dynamiques et statiques.


Le fichier suivant :

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

Est-il vraiment identique ? Mieux optimisé ?



Merci d'avance

Dernière modification par miboo (07-11-2008 11:30:57)


aka miboo

Hors ligne

 

#2 03-10-2008 17:20:34

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [résolu] Installation & .htaccess

Bonjour,

La ligne 5 est liée aux lignes 2, 3 et 4. Ces 4 lignes veulent dire :
"si le fichier demander est un lien, ou un fichier, ou un répertoire qui existe, ne fait pas de réécriture (ou disons fait une réécriture vers "-" qui représente l'URL demandée)"

ensuite L6 dit : "si on n'est pas dans le cas ci-dessus, renvoie vers index.php".

C'est pas tout à fait pareil que l'autre réécriture. L'autre réécriture veut dire :
"renvoie toutes les requête vers index.php, sauf les .js, .ico, .jpg,....".

Ca veut pas dire la même chose, mais les deux peuvent faire fonctionner le ZF correctement. Ils ont changé les rewrite préconisées pour problèmes liés à Zend_Dojo.

Dans certains cas concrets, on a parfois besoin de changer ces réécritures (genre si tu veux générer dynamiquement une image, mais que tu veux qu'elle ait quand même un .jpg dans l'URL ou ce genre de blague....)

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 03-10-2008 17:24:23

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [résolu] Installation & .htaccess

Merci beaucoup pour ces explications.

La seule chose qui m'échappe c'est qu'est-ce qui peut être renvoyé à l'index.php si ce n'est ni un dossier, ni un lien symbolique, ni un fichier ??


aka miboo

Hors ligne

 

#4 03-10-2008 17:35:40

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [résolu] Installation & .htaccess

Y'a un truc tordu dans le principe des rewrite, si on veut comprendre vraiment ce qui se passe il faut piger ça :
ce qui entre dans une rewrite c'est une URL, ce qui en sort, c'est un nom de fichier en dur sur un disque (pour les puriste d'apache, je sais que c'est pas 100% vrai, mais c'est un bon 95%...)

Je le mets en énorme parce que si on n'a pas compris ça, on peut rien comprendre au reste :

reprenons les rewriterules du 1er message
si tu appelles http://monsite/toto/titi, le moteur de rewrite va regarder s'il y a un lien, un fichier ou un répertoire qui s'appelle DOC_ROOT/toto/titi sur ton disque. S'il n'y en a pas, apache va exécuter le fichier DOC_ROOT/index.php. Par contre l'URL appelée reste http://monsite/toto/titi. C'est pour ça que le ZF va pouvoir interpréter l'URL demandée et orienter la requête vers les bons module/action/ctrl,...

On arrive dans le pointu... La doc apache est un peu difficile à lire, mais c'est assez intéressant de comprendre les rewrite... http://httpd.apache.org/docs/2.2/rewrit … intro.html

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#5 09-10-2008 10:13:22

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [résolu] Installation & .htaccess

Merci.

Si j'ai bien compris, quand une URL est demandée, deux cas possibles :

1°) l'URL correspond à quelque chose (fichier, répertoire, lien),
alors, on laisse la requête effectuée normalement


2°) l'URL ne correspond ni à un répertoire, ni à une URL, ni à un lien symbolique
alors on redirige sur l'index.php

Mais typiquement, qu'est ce qui va être redirigé sur le front controller (index.php), les pages inexistantes ?


Et si ZF fonctionne, c'est parce que le modèle MVC a besoin que le nom demandée (DOC/root/monsite/) ne change pas en cours de route (si oui, pourquoi?)

C'est bien ça ?

Dernière modification par miboo (10-10-2008 11:35:08)


aka miboo

Hors ligne

 

#6 10-10-2008 11:35:21

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [résolu] Installation & .htaccess

miboo a écrit:

Merci.

Si j'ai bien compris, quand une URL est demandée, deux cas possibles :

1°) l'URL correspond à quelque chose (fichier, répertoire, lien),
alors, on laisse la requête effectuée normalement


2°) l'URL ne correspond ni à un répertoire, ni à une URL, ni à un lien symbolique
alors on redirige sur l'index.php

Mais typiquement, qu'est ce qui va être redirigé sur le front controller (index.php), les pages inexistantes ?


Et si ZF fonctionne, c'est parce que le modèle MVC a besoin que le nom demandée (DOC/root/monsite/) ne change pas en cours de route (si oui, pourquoi?)

C'est bien ça ?

edited


aka miboo

Hors ligne

 

#7 10-10-2008 15:38:34

gauthier
Membre
Date d'inscription: 30-09-2008
Messages: 116
Site web

Re: [résolu] Installation & .htaccess

Salut Miboo,

Mais typiquement, qu'est ce qui va être redirigé sur le front controller (index.php), les pages inexistantes ?

je vais essayer d'éclairer ta lanterne sur ce point précis au moins smile

concrètement, dans une application ZF, il n'y a en général qu'un fichier .php dans l'arborescence web (c'est à dire dans le dossier configuré dans la directive DocumentRoot d'Apache. Ce fichier, c'est index.php, que l'on appelle souvent le "bootstrap" de l'application. Voire ce post pour plus d'infos sur le sujet.

Par tant de là, toute URL ne pointant pas sur /index.php, hormis les images, .js, css, etc., ne peut que pointer "dans le vide".

Les règles de réécriture permettent que chaque fois qu'une telle URL est demandée, elle soit transformée pour devenir /index.php. Mais au passage, l'URL d'origine est conservée.

Ceci va permettre au contrôleur frontal de ZF, au moment ou tu exécutes dispatch(), de déterminer quel contrôleur et quelle action il doit exécuter.

un exemple simple : si tu va sur /user/login, l'url réellement appelée sera /index.php, lequel script pourra se servir de la chaîne /user/login, en l'éclatant par exemple avec explode('/',$url_de_depart), pour déclencher l'action loginAction() du contrôleur user.

Tu auras d'ailleurs remarqué qu'il n'existe effectivement pas de fichier "/user/login", ni correspondant ç aucune autre url d'ailleurs. Pour autant, on ne peut pas parler de pages inexistantes, puisque c'est chaque fois /index.php qui sera appelé.

En gros, ça revient au même que d'appeler index.php?commande=/user/login (à peu de choses près wink)

Dernière chose, si une application ZF te retourne une vraie belle erreur 404 (page not found), c'est parce que le contrôleur et/ou l'action n'existe pas, et que le contrôleur d'erreur aura retourné explicitement ce code d'erreur avec header('Location: /erreur404.html, 404) par exemple (et là erreur404.html doit exister bien sûr)


Voilà, je pense avoir fait le tour... sinon, dis-moi wink

Dernière modification par gauthier (10-10-2008 15:42:09)


Consultant Zend Technologies // Blog perso : Logiciel libre et développement web -- http://freeblogware.org

Hors ligne

 

#8 10-10-2008 18:06:51

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [résolu] Installation & .htaccess

Ah mais oui bien sûr, je n'avais plus en tête mon DocumentRoot. je crois que c'est plus clair maintenant :p

Donc si je résume bien :

Seul mon répertoire public (qui contient index.php) est accessible depuis l'extérieur. Ainsi que mes différents scripts js, images et CSS parce que je dois les placer dedans.

Néanmoins ZF a besoin d'accéder à différents répertoires (model, library...), ce qui n'est pas possible dans notre cas. Pour corriger ce problème on réécrit la demande comme si la page demandée était /public/index.php tout en gardant en tête que la requête porte sur tout autre chose.

C'est bien ça ?

Dernière modification par miboo (18-10-2008 14:19:17)


aka miboo

Hors ligne

 

#9 11-10-2008 10:12:28

gauthier
Membre
Date d'inscription: 30-09-2008
Messages: 116
Site web

Re: [résolu] Installation & .htaccess

bingo smile

Une autre manière de le résumer : si tu n'utilises pas de réécriture d'URL, c'est Apache qui décide quel fichier exécuter en fonction de l'URL. Dans le cas d'une appli ZF, comme il est assez compliqué de faire ce choix, c'est le script index.php qui s'en charge à la place d'Apache. Ce dernier redirige donc systématiquement toutes les requêtes qui ne sont pas des fichiers simples (js, css, images, etc.) vers index.php, mais en lui disant : "tiens gars, on m'a demandé l'url "/machin/truc/bidule", je ne sais pas quoi en faire, débrouille-toi avec ça !

Bon d'accord, Apache ne s'adresse pas exactement en ces termes au bootstrap, mais dans les faits, ça revient à ça smile


Consultant Zend Technologies // Blog perso : Logiciel libre et développement web -- http://freeblogware.org

Hors ligne

 

#10 16-10-2008 09:18:12

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [résolu] Installation & .htaccess

Je crois que j'ai bien compris maintenant. Néanmoins, il y a encore un petit truc qui me chiffonne,

L.2 RewriteCond %{REQUEST_FILENAME} -s [OR]
L.3 RewriteCond %{REQUEST_FILENAME} -l [OR]
L.4 RewriteCond %{REQUEST_FILENAME} -d

les conditions suivantes permettent de laisser les URL tel quel lorsque par exemple, un fichier javascript est demandé.

L.6 RewriteRule ^.*$ index.php [NC,L]

La mention suivante redirige le reste sur l'index.php.
Typiquement, c'est quoi le reste ?


aka miboo

Hors ligne

 

#11 16-10-2008 13:52:54

gauthier
Membre
Date d'inscription: 30-09-2008
Messages: 116
Site web

Re: [résolu] Installation & .htaccess

Typiquement, le reste, ce sont toutes les URLs du type http://tonsite.com/controller/action, qui n'existent pas (donc ne matchent pas les premières conditions) et sont redirigés vers index.php qui lui utilisera l'URL demandé pour exécuter le bon script.


Consultant Zend Technologies // Blog perso : Logiciel libre et développement web -- http://freeblogware.org

Hors ligne

 

#12 16-10-2008 14:00:12

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [résolu] Installation & .htaccess

Merci Gauthier smile


aka miboo

Hors ligne

 

#13 16-10-2008 14:09:49

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [résolu] Installation & .htaccess

miboo a écrit:

Bonjour, je ne comprends pas très bien les règles htaccess du Quickstart :

L.1 RewriteEngine On
L.2 RewriteCond %{REQUEST_FILENAME} -s [OR]
L.3 RewriteCond %{REQUEST_FILENAME} -l [OR]
L.4 RewriteCond %{REQUEST_FILENAME} -d
L.5 RewriteRule ^.*$ - [NC,L]
L.6 RewriteRule ^.*$ index.php [NC,L]



Le fichier suivant :

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

Est-il vraiment identique ? Mieux optimisé ?



Merci d'avance

Petite info supplémentaire :

" Dojo intègre un certain nombre de fichiers, certains sont des templates destinés à la création des widgets. Si vous réalisez votre propre build ces templates HTML seront intégrés aux js mais dans la source ils s'agit de fichiers séparés. Pour éviter une redirection malencontreuse vers le contrôleur frontal voici de nouvelles règles : " - voir : http://www.z-f.fr/forum/viewtopic.php?id=1820

Pour éviter ce problème, la première solution est donc préconisée.


aka miboo

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages