Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
je sollicite de l'aide parce que malgré que ce sujet ait déjà été abordé ici, je n'ai pas vu de solution fonctionnant pour moi. Je veux bien croire que c'est un problème de réécriture d'URL,mais je vois pas où je me gourre.
Mais j'avoue moins bien me servir d'apache 2 que d'apache 1... et être un vrai débutant avec ce Framework.
Le problème est le suivant : dès que je fais appel à un contrôleur autre que l'index, j'ai par exemple ce message :
The requested URL /Raquette/public/Admin was not found on this server.
j'ai vu des posts disant que le /public n'était pas normal, mais ils ne m'ont pas aidés plus que ça ...
Alors j'utilise :
-> Zend 1.10.3
-> apache 2
-> une distribution linux dérivée d'ubuntu nommée linux Mint . On dira qu'il s'agit d'une Ubuntu.
Et j'ai tout construit avec Zend Tool
J'appelle ma vue de la façon suivante :
<a href="<?php echo $this->url(array('controller' => 'Admin', 'action' => 'index')); ?>">Administration</a>
Mon .htaccess a connu plusieurs version, mais la version actuelle est celle-ci :
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
J'ai un virtual Host défini dans etc/apache2/sites-enabled nommé Raquette:
<VirtualHost *:80> ServerAdmin webmaster@raquette ServerName Raquette ServerAlias www.Raquette DocumentRoot /www/htdocs/Raquette/ <Directory /www/htdocs/Raquette/> AllowOverride All Allow from all </Directory> </VirtualHost>
En ce qui concerne le mode réécriture d'url :
la commande a2enmod rewrite me dit bien :
Module rewrite already enabled
et de fait, dans /etc/apache2/mods-enabled, j'ai bien rewrite.load
je peux vous donner le bootstrap :
index.php
<?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();
Et le fichier de config : application.ini
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 phpSettings.date.timezone = "Europe/Paris" includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0 resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" resources.view.doctype = "XHTML1_STRICT" resources.db.adapter = PDO_MYSQL resources.db.params.host = localhost resources.db.params.username = root resources.db.params.password = pass resources.db.params.dbname = raquette [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1
Je rappelle que les actions du contrôleur index fonctionnent.
Merci d'avance. Si vous avez besoin d'autres infos, n'hésitez pas !
Dernière modification par Camber (14-07-2010 16:13:05)
Hors ligne
Qui ya t-il dans le fichier
application/Bootstrap.php
Dans le dossier
application/controllers/
As tu bien un fichier AdminController.php ?
Contient-il bien une méthode indexAction{} (ou unnomAction{} ) et dans ton dossier
application/views/scripts
as tu bien un dossier 'admin' ? Contient-il bien un fichier index.dhtml (ou unnom.dhtml) ?
Ton dossier public à t-il bien pour chemin
/public/
c'est à dire est-il à la racine du projet? Le .htaccess est -il bien dans le dossier public?
Hors ligne
Merci pour la réponse.
Le fichier Bootstrap.php a été généré automatiquement et contient :
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }
Dans application/controllers,
j'ai un fichier AdminController.php qui contient ceci :
<?php class AdminController extends Zend_Controller_Action { public function init() { /* Initialize action controller here */ } public function indexAction() { // action body $this->view->setEscape('utf8_encode'); $this->view->title = "Administration"; $this->view->headTitle($this->view->title); } public function editAction() { // action body } }
application/views/scripts contient les 2 fichiers index.phtml et edit.phtml
Et enfin, après revérification, mon dossier /public est bien à la racine du site et il contient le fichier .htaccess dont le contenu figure dans le premier post.
Hors ligne
application/views/scripts contient les 2 fichiers index.phtml et edit.phtml
ces deux fichiers doivent être dans un dossier au nom du controller, donc ici 'admin' c'est le cas ou ils sont directement dans 'scripts' ?
Hors ligne
euh oui, pardon, je rectifie, ces 2 fichiers sont dans application/views/scripts/admin/
Hors ligne
La franchement je vois pas
Hors ligne
shadypierre a écrit:
La franchement je vois pas
C'est pas grave. Merci pour ton aide.
ça m'a au moins permis de vérifier quelques points.
Je vais continuer à chercher mais je sèche aussi
Hors ligne
Bonsoir,
juste pour avertir que j'ai trouvé une solution de contournement.
Ce n'était visiblement pas le code ni la structure du projet. Je pense plutôt à un problème avec mon virtualhost.
Il doit y aavoir quelque chose qui m'échappe avec ces virtualhosts avec apache 2.
Bref, je pensais avoir déjà essayé ça mais en insérant
<Directory /www/htdocs/Raquette> AllowOverride All Allow from all </Directory>
dans httpd.conf (qui au départ est un fichier vide inclus dans apache2.conf), ça a fonctionné et j'ai pu poursuivre mon projet.
Néanmoins, j'aimerais autant ne pas mettre ce sujet en résolu ...
Si quelqu'un pouvait m'expliquer ce que j'ai mal fait à ce sujet avant ...
Merci
Hors ligne
Est ce que tu es sur que ton fichier de config "sites-enabled" est bien chargé par le serveur apache? ("Include etc/apache22/extra/sites-enabled" au chemin près )
S'il est chargé alors je ne vois pas ce que tu as fait de mal. S'il n'est pas chargé et que tu as réglé le même répertoire comme page d'accueil du serveur hors hôte virtuel alors le problème était masqué :
- le navigateur a utilisé le DNS pour trouer le serveur
- le serveur retourne la page principale s'il n'a pas d'hote viruel connus (même répertoire donc même page web)
- si le fichier de configuration des hôtes virtuel n'est pas chargé, c'est la configuration du site principal qui est utilisé.
Vu que ça a fonctionné quand tu as changé la configuration du site principal, j'en conclus que t'as du rater le chemin vers ton autre fichier de configuration et que tu t'es retrouvé avec la configuration par défaut pour ce répertoire.
Hors ligne
Salut,
Je dirais que c'est ton vhost qui n'est pas bon.
Tu peux soit déterminer un ServerName, soit un Alias, et j'ai l'impression que tu mélanges les deux. De plus ton DocumentRoot ne pointe pas sur public.
1ère solution :
<VirtualHost *:80> SetEnv APPLICATION_ENV development ServerAdmin webmaster@raquette ServerName local.raquette.com DocumentRoot "/www/htdocs/Raquette/public" <Directory "/www/htdocs/Raquette/public"> Options -Indexes FollowSymLinks MultiViews ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
puis un "sudo /etc/init.d/apache2 force-reload" biensur.
Il faut aussi indiquer la redirection dans ton fichier hosts (/etc/hosts) :
127.0.0.1 local.raquette.com
Tu accèderas donc à ton site par http://local.raquette.com/
2ème solution (Alias) :
<VirtualHost *:80> ServerName web.local ServerAdmin webmaster@raquette ##### # Raquette <Location /raquette> SetEnv APPLICATION_ENV development Options -Indexes FollowSymLinks MultiViews ExecCGI AllowOverride all Order allow,deny Allow from all </Location> Alias /raquette "/www/htdocs/Raquette/public" ##### ##### # Autre site <Location /autre-site> SetEnv APPLICATION_ENV development Options -Indexes FollowSymLinks MultiViews ExecCGI AllowOverride all Order allow,deny Allow from all </Location> Alias /autre-site "/www/htdocs/autre-site/public" ##### </VirtualHost>
Et tu accèderas à tes sites via http://web.local/raquette/ et http://web.local/autre-site/
Cette solution est moins valable car le domaine étant le même, les sessions seront partagées entre les sites.
A+ benjamin.
Hors ligne
Bonjour,
Merci de ces réponses
omega2 a écrit:
Est ce que tu es sur que ton fichier de config "sites-enabled" est bien chargé par le serveur apache? ("Include etc/apache22/extra/sites-enabled" au chemin près )
J'avais bien vérifié, il me semble, mais en principe oui,
apache2.conf a écrit:
# Include the virtual host configurations:
Include /etc/apache2/sites-enabled
omega2 a écrit:
S'il est chargé alors je ne vois pas ce que tu as fait de mal. S'il n'est pas chargé et que tu as réglé le même répertoire comme page d'accueil du serveur hors hôte virtuel alors le problème était masqué :
- le navigateur a utilisé le DNS pour trouer le serveur
- le serveur retourne la page principale s'il n'a pas d'hote viruel connus (même répertoire donc même page web)
- si le fichier de configuration des hôtes virtuel n'est pas chargé, c'est la configuration du site principal qui est utilisé.
Vu que ça a fonctionné quand tu as changé la configuration du site principal, j'en conclus que t'as du rater le chemin vers ton autre fichier de configuration et que tu t'es retrouvé avec la configuration par défaut pour ce répertoire.
C'est possible ...
Delprog a écrit:
Salut,
Je dirais que c'est ton vhost qui n'est pas bon.
Tu peux soit déterminer un ServerName, soit un Alias, et j'ai l'impression que tu mélanges les deux. De plus ton DocumentRoot ne pointe pas sur public.
1ère solution :Code:
<VirtualHost *:80> SetEnv APPLICATION_ENV development ServerAdmin webmaster@raquette ServerName local.raquette.com DocumentRoot "/www/htdocs/Raquette/public" <Directory "/www/htdocs/Raquette/public"> Options -Indexes FollowSymLinks MultiViews ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>puis un "sudo /etc/init.d/apache2 force-reload" biensur.
Il faut aussi indiquer la redirection dans ton fichier hosts (/etc/hosts) :
127.0.0.1 local.raquette.com
Tu accèderas donc à ton site par http://local.raquette.com/
Oui, d'accord pour le vhost. Pour le mélange, c'est possible, je pensais avoir fait attention, mais je connais pas suffisament encore, probablement.
Bilan sur la solution 1
En redéfinissant tout propre mon vhost avec ton code ça fonctionne. J'avais, je pense bien renseigné mon /etc/hosts:
127.0.0.1 Raquette
La seule chose qui posait problème a priori, c'est bien que mon DocumentRoot ne pointait pas sur public.
J'avais pris modèle sur le vhost proposé dans le tutoriel de Rob Allen :
http://akrabat.com/zend-framework-tutorial/
qui est a priori une référence en Zend (j'ai d'ailleurs son bouquin Zend Framework in Action, qui m'a pas l'air mal du tout).
Mais à la relecture du tuto, il indique bien public, j'avais mal lu ou alors je l'avais enlevé suite à la lecture dautres exemples de fichiers sur le net, je ne sais plus trop ....
Et du coup, j'abandonne la solution 2
En tout cas, merci beaucoup à vous 2 pour ces éclaircissement qui me permettent d'avoir une définition plus claire. Et à l'avenir, je saurais définir un vhost correctement ^_^
@++
Camber.
Hors ligne