Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
bonjour,
Depuis quelques jours j'ai un petit souci avec un site que je viens de mettre en ligne
Je débute sur Zend.
Mon problème est que je souhaiterais idéalement ne pas avoir à entrée : www.monsite.fr/public mais juste www.monsite.fr
Je pensais que modifié le virtual host serait suffisant sauf que Zend ne retrouve pas la plupart des ressources
Voici mes fichiers :
Arborescence :
www application Bootstrap.php configs languages modules captcha *.png index.html library My Zend public (CSS et autres répertoire de ressources) .htaccess index.php
.htaccess
AddType x-mapp-php6 .php AddHandler x-mapp-php6 .php RewriteEngine On RewriteBase /public RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
vhosts.conf
<VirtualHost *:80> ServerName monsite DocumentRoot /home/monsite/www SetEnv APPLICATION_ENV "development" <Directory /home/moniste/www> AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
Ainsi mon site trouve bien ses ressources hormis quelques image ou j'obtiens dans la console du navigateur :
Resource interpreted as Image but transferred with MIME type text/html: "http://www.monsite.fr/public/images/partenaire/img_53ec76cb67677".
Par contre l'url à taper est bien http://www.monsite.fr/public (ou se trouve le index.php)
Que dois je paramètrer pour n'avoir à écrire uniquement www.monsite.fr sans perte des chemins ?
Merci d'avance.
Dernière modification par mezoo (25-08-2014 10:27:51)
Hors ligne
Salut pour ne pas avoir à entrer le "public" il suffit de changer ton DocumentRoot et Directory en y ajouter /public après www
Hors ligne
Salut,
Merci de ta réponse.
j'ai effectivement tenté mais du coup je trouve une erreur 500 avec ceci dans les logs httpd :
[Wed Aug 20 14:05:54.561577 2014] [core:alert] [pid 752] [client xx.xx.xx.xx:3005] /home/monsite/www/public/.htaccess: RewriteEngine not allowed here
Dernière modification par mezoo (20-08-2014 14:07:51)
Hors ligne
Bonjour,
Le message d'erreur est assez clair à mon gout, tu ne peux pas utiliser le mod_rewrite dans ce htaccess (comprendre dans ce dossier).
La solution est donc assez évidente, tu dois déclarer un AllowOverride sur ton dossier dans ton virtualhost (comme indiqué dans la doc avec un AllowOverride All).
Hors ligne
Tout à fait, j'avais écris un chemin incomplet dans le <Directory>
Ceci dit, ça me ramène à ma première erreur :
Le site se retrouve comme s'il ne retrouvait plus ses ressources et j'ai des "AH00122 : redirected" partout dans la log et les liens du menu provoque des erreurs 500
J'ai également :
AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error...
Désolé j'ai cherché avant de poster sur le forum mais je ne sais pas d'ou ca peut venir.
Dernière modification par mezoo (20-08-2014 16:41:57)
Hors ligne
Il va nous falloir plusieurs choses :
* ton virtualhost
* tous les .htaccess que tu utilises
* la version d'apache utilisée
Hors ligne
Ok c'était dans le premier post mais je le remet avec la derniere modif :
vhosts.conf
[lang=xml]<VirtualHost *:80> ServerName monsite.fr DocumentRoot /home/monsite/www/public SetEnv APPLICATION_ENV "development" <Directory /home/monsite/www/public> AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
.htaccess
#AddType x-mapp-php6 .php #AddHandler x-mapp-php6 .php RewriteEngine On RewriteBase /public RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
Server version: Apache/2.4.6 (CentOS)
Voilà
Dernière modification par mezoo (20-08-2014 22:09:55)
Hors ligne
En effet je suis pas frais moi...
Tu as un truc étrange... Ton docRoot est dans /public, et dans ton htaccess t'as un RewriteBase... ça peut pas marcher déjà ça...
Pour le reste honnêtement je vois pas de problème... en même temps je viens de passer la nuit à bosser alors mon avis est surement un peu à la masse...
Hors ligne
Salut,
Pas de soucis ,c'est déjà sympa de me répondre.
En virant le ReWriteBase ça n'a rien changé
Est ce que ça peut être dû au fichier de config de Zend ?
Dernière modification par mezoo (21-08-2014 09:57:56)
Hors ligne
Non c'est pas lié à un fichier de conf de Zend, c'est apache qui est pas content .
Hors ligne
Et ça entraine le fait qu'il ne trouve pas les ressources des images et css ?
Parce la mon site à une sale gueule
Dernière modification par mezoo (21-08-2014 13:35:19)
Hors ligne
As-tu regardé dans les developer tools de ton navigateur quelles urls il essaye de chercher ? Des fois ça donne une indication (est-ce qu'il cherche toujours dans public par exemple ?) ?
Sinon, ton code est-il privé où peut-on le trouver sur un repository en ligne open ? Si c'est open je peux jeter un œil.
Hors ligne
Malheureusement non c'est le site d'une collectivité
Je pourrais t'envoyer des fichiers précis mais je ne sais pas lesquelles
Par contre là j'ai un soucis, plus rien ne marche et pourtant la config n'
Hors ligne
Malheureusement non c'est le site d'une collectivité
Je pourrais t'envoyer des fichiers précis mais je ne sais pas lesquels
Je m'aperçois d'une erreur que je n'ai pas vu :
PHP Warning: Invalid argument supplied for foreach() in /home/monsite/www/library/My/Acl/Ini.php on line 52
Et dans l'inspection d'élément du browser j'ai :
GET http://www.monsite.net/images/partenaire/img_53ec76cb67677 500 (Internal Server Error)
J'ai fait un autre test en gardant RewriteBase /public et en laissant le DocumentRoot à /home/monsite/www/
j'ai un affichage correcte mais toujours l'erreur PHP warning
Hors ligne
Déjà c'est cool si ça marche au moins partiellement.
Pour le foreach, il va falloir que tu nous montres le fichier mais c'est normalement simple, tu passes une variable qui n'est pas un tableau ou un ArrayAccess ou dans ce goût, d'où l'erreur.
Hors ligne
Oui mais je suis toujours obligé de rentrer le chemin complet.
voici le code du Ini.php :
[lang=php] class My_Acl_Ini extends Zend_Acl { public function __construct($file) { $roles = new Zend_Config_Ini($file, 'roles') ; $this->_setRoles($roles) ; $ressources = new Zend_Config_Ini($file, 'ressources') ; $this->_setRessources($ressources) ; foreach ($roles->toArray() as $role => $parents) { $privileges = new Zend_Config_Ini($file, $role) ; $this->_setPrivileges($role, $privileges) ; } } protected function _setRoles($roles) { foreach ($roles as $role => $parents) { if (empty($parents)) { $parents = null ; } else { $parents = explode(',', $parents) ; } $this->addRole(new Zend_Acl_Role($role), $parents); } return $this ; } protected function _setRessources($ressources) { foreach ($ressources as $ressource => $parents) { if (empty($parents)) { $parents = null ; } else { $parents = explode(',', $parents) ; } $this->add(new Zend_Acl_Resource($ressource), $parents); } return $this ; } protected function _setPrivileges($role, $privileges) { foreach ($privileges as $do => $ressources) { foreach ($ressources as $ressource => $actions) { if (empty($actions)) { $actions = null ; } else { $actions = explode(',', $actions) ; } $this->{$do}($role, $ressource, $actions); } } return $this ; } }
Qui est appelé dans le Bootstrap :
[lang=php] ... Zend_Loader::loadClass('My_Acl_Ini'); Zend_Loader::loadClass('My_Controller_Plugin_Auth'); $acl_ini = APPLICATION_PATH.'/configs/acl.ini'; $acl = new My_Acl_Ini($acl_ini); ...
le fichier acl.ini
[roles] guest = null candidat = null employeur = null superadmin = null bij = null pij= null [ressources] ; définition des ressources dans le module par défaut actualite = null actualites = null auth = null offres = null compte = null employeur = null error = null index = null inscription = null offre = null preview = null profil = null search = null mentions = null entreprisesquifontconfiance = null ; définition des ressources dans le module d'admin admin_auth = null admin_index = null admin_employeur = null admin_offre = null admin_actualite = null admin_video = null admin_partenaire = null admin_publicite = null [guest] allow.actualite = null allow.actualites = null allow.auth = null allow.offres = null deny.compte = null allow.employeur = null allow.error = null allow.index =null allow.inscription = null allow.offre = null allow.preview = null allow.mentions = null allow.entreprisesquifontconfiance = null deny.profil = null allow.search = null allow.admin_auth = null deny.admin_index = null deny.admin_employeur = null deny.admin_offre = null deny.admin_actualite = null deny.admin_video = null deny.admin_partenaire = null deny.admin_publicite = null [candidat] allow.actualite = null allow.actualites = null allow.auth = null allow.offres = null allow.compte = null allow.employeur = null allow.error = null allow.index =null allow.inscription = null allow.offre = null allow.preview = null allow.profil = null allow.search = null allow.entreprisesquifontconfiance = null deny.admin_auth = null deny.admin_index = null deny.admin_employeur = null deny.admin_offre = null deny.admin_actualite = null deny.admin_video = null deny.admin_partenaire = null deny.admin_publicite = null [employeur] allow.actualite = null allow.actualites = null allow.auth = null allow.offres = null allow.compte = employeur,modifier allow.employeur = null allow.error = null allow.entreprisesquifontconfiance = null deny.index =null deny.inscription = null allow.offre = null allow.preview = null allow.profil = null allow.search = null deny.admin_auth = null deny.admin_index = null deny.admin_employeur = null deny.admin_offre = null deny.admin_actualite = null deny.admin_video = null deny.admin_partenaire = null deny.admin_publicite = null [superadmin] allow.actualite = null allow.actualites = null allow.auth = null allow.offres = null allow.compte = null allow.employeur = null allow.error = null allow.index =null allow.inscription = null allow.offre = null allow.preview = null allow.profil = null allow.search = null allow_admin_auth = null allow.admin_index = null allow.admin_employeur = null allow.admin_offre = null allow.admin_actualite = null allow.admin_video = null allow.admin_partenaire = null allow.admin_publicite = null [bij] deny.actualite = null deny.actualites = null deny.auth = null deny.offres = null deny.compte = null deny.employeur = null deny.error = null deny.index =null deny.inscription = null deny.offre = null deny.preview = null deny.profil = null deny.search = null allow.admin_auth = logout allow.admin_index = null allow.admin_employeur = null allow.admin_offre = creer,modifier,liste,listeinactives,desactiver,activer deny.admin_actualite = null deny.admin_video = null deny.admin_partenaire = null deny.admin_publicite = null [pij] deny.actualite = null deny.actualites = null deny.auth = null deny.offres = null deny.compte = null deny.employeur = null deny.error = null deny.index =null deny.inscription = null deny.offre = null deny.preview = null deny.profil = null deny.search = null allow.admin_auth = logout allow.admin_index = null allow.admin_employeur = null allow.admin_offre = creer,liste,listeinactives deny.admin_actualite = null deny.admin_video = null deny.admin_partenaire = null
le fichier application.ini :
[production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 includePaths.library = APPLICATION_PATH "/../library" includePaths.modules = APPLICATION_PATH "/modules" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" resources.modules[] = "" ;MODULES resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.frontController.params.prefixDefaultModule = 1 resources.frontController.defaultModule = "front" appnamespace = "" resources.frontController.params.displayExceptions = 1 resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" ;LAYOUT | VIEW resources.view.encoding = "UTF-8" resources.view.doctype = HTML5 resources.db.adapter = "pdo_mysql" resources.db.params.host = "monIP" resources.db.params.username = "username" resources.db.params.password = "xxxx" resources.db.params.dbname = "monDB" resources.db.isDefaultTableAdapter = true [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
et le public/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();
Est ce que la definition de APPLICATION_PATH est correcte ?
Hors ligne
Pages: 1