2010-08-24 6 views
0

Je suis mise en place d'une application Zend, et est passé par les étapes de base de la mise en place modrewrite sur mon poste de développement, et d'écrire un fichier .htaccess (illustré ci-dessous). Maintenant, quand je vais à la racine de mon projet, Zend fonctionne correctement, appelle le contrôleur et affiche la page appropriée. Cependant, quand j'appelle n'importe quel contrôleur, je m'attendrais à ce qu'il redirige vers le même fichier index.php, qui à son tour le dirigerait au contrôleur approprié et à l'action (par exemple myurl/controller/action serait lu par myurl /index.php qui redirigerait ensuite vers l'action de manière appropriée).Zend et ModRewrite ne travaillent pas ensemble correctement

Je pense que le problème est lié en quelque sorte à la façon dont je l'ai créé mon fichier .htaccess, car appeler l'URL de base ne fonctionne pas correctement. Mais je n'ai pas été capable de comprendre ce qui ne va pas. Quelqu'un a-t-il une suggestion?

Options +FollowSymLinks 
RewriteEngine On 

RewriteBase/

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 

RewriteRule ^.*$ - [NC,L] 
RewriteRule ^(.*)/(.*)$ index.php [NC,L] 
RewriteRule ^(.*)/(.*)/(.*)$ index.php [NC,L] 
RewriteRule ^(.*)/(.*)/(.*)/(.*)$ index.php [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 
+0

Que se passe-t-il à la place? Êtes-vous dirigé vers l'action d'index 'ErrorController', ou? –

+0

Non, j'obtiens une erreur 404. Plus précisément, "L'URL /index.php demandée n'a pas été trouvée sur ce serveur." – Elie

+1

Oh ... C'est bizarre. L'application se trouve-t-elle dans le fichier 'DOCUMENT_ROOT' ou dans un sous-répertoire? –

Répondre

1

Bon, voici ce que c'était.

Mon DOCUMENT_ROOT est/var/www alors que mon application est en cours d'exécution sur/var/www/app1 avec tout mis en place là-dedans. En raison de la ligne RewriteBase /, il redirigeait vers le DOCUMENT_ROOT au lieu de l'APPLICATION_ROOT. Je l'ai corrigé en changeant cette ligne à:

RewriteBase /app1 

et maintenant tout fonctionne parfaitement.

+1

(Désolé, est allé déjeuner, puis une réunion) Ahh, bien sûr, le 'RewriteBase'. La [documentation du module] (http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase) suggère qu'il est nécessaire d'avoir dans la plupart des cas, mais cela est généralement faux (les choses auraient dû fonctionner aussi bien si vous l'aviez omis complètement), je trouve cela un peu trompeur. Quoi qu'il en soit, bonne prise, +1 –

+0

Merci! Votre commentaire à propos de DOCUMENT_ROOT m'a amené sur ce point, car j'ai plusieurs sites fonctionnant sur mon seul serveur Apache, mais seul celui-ci utilise modrewrite pour le moment. – Elie

+0

Est-ce que je me trompe en pensant que DocumentRoot doit être défini sur/var/www/app1/public? – Herbert

Questions connexes