Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Voici le problème que je rencontre actuellement.
Avec une configuration classique (et les réécritures qui vont bien) sur un hébergement mutualisé utilisant pour webserver Apache2, on peut accéder à un controller de la manière suivante :
http://domain.tld/controller
mais on peut également y accéder via :
http://domain.tld/index.php/controller
Je ne souhaite pas particulièrement traiter ce genre de problème via des règles de réécriture différentes au sein du fichier .htaccess mais j'aimerais plutôt que ces cas soient gérés comme des cas classiques par le routeur. Ici, le routeur cherchant alors un controller index.php, qu'il existe ou non.
Je n'arrive pas à comprendre les raisons du fonctionnement actuel, et je suppose que le problème est situé autour des classes Zend_Controller_Request_Http ou Zend_Controller_Dispatcher_Standard, mais je me demande s'il est possible via une configuration ou un plugin quelconque de corriger ce comportement que je ne souhaite vraiment pas.
En passant, avoir un fonctionnement tel par défaut augmente les risques de duplicate content. Pour moi, et jusqu'à preuve du contraire, il s'agit dès lors plus d'un bug que d'une possibilité.
Hors ligne
Pour situer plus précisément ce que je considère comme étonnant :
Zend/Controller/Request/Http:612
[lang=php] /** * Set the PATH_INFO string * * @param string|null $pathInfo * @return Zend_Controller_Request_Http */ public function setPathInfo($pathInfo = null) { if ($pathInfo === null) { $baseUrl = $this->getBaseUrl(); // this actually calls setBaseUrl() & setRequestUri() $baseUrlRaw = $this->getBaseUrl(false); $baseUrlEncoded = urlencode($baseUrlRaw); if (null === ($requestUri = $this->getRequestUri())) { return $this; } // Remove the query string from REQUEST_URI if ($pos = strpos($requestUri, '?')) { $requestUri = substr($requestUri, 0, $pos); } if (!empty($baseUrl) || !empty($baseUrlRaw)) { if (strpos($requestUri, $baseUrl) === 0) { $pathInfo = substr($requestUri, strlen($baseUrl)); } elseif (strpos($requestUri, $baseUrlRaw) === 0) { $pathInfo = substr($requestUri, strlen($baseUrlRaw)); } elseif (strpos($requestUri, $baseUrlEncoded) === 0) { $pathInfo = substr($requestUri, strlen($baseUrlEncoded)); } else { $pathInfo = $requestUri; } } else { $pathInfo = $requestUri; } } $this->_pathInfo = (string) $pathInfo; return $this; }
Ici, $baseUrl vaut peu ou prou $_SERVER['SCRIPT_FILENAME'], impliquant donc qu'on supprime cette partie si elle est présente dans $_SERVER['REQUEST_URI']. Je me demande réellement s'il y a un intérêt quelconque à cela, et si intérêt il y a pour certains cas de figure, je trouve étonnant d'en faire une généralité.
Hors ligne
Auto-réponse à nouveau, et je pense que celle-ci peut potentiellement intéresser d'autres personnes, si l'on veut se débarrasser de l'accès via index.php dans une configuration classique de déploiement ZF, il "suffit" de définir au préalable la baseUrl afin que Zend_Controller_Request_Http ne la détermine automatiquement. Pour définir la baseUrl, une méthode consiste à ajouter la ligne suivante dans le fichier ini de votre application :
resources.frontController.baseUrl = "/"
C'est tout simple, mais pas forcément évident au premier abord
Hors ligne
Pages: 1