2010-05-07 4 views
1

J'utilise le Zend Router et ainsi des choses comme (/ et /index.php) ou (/ about et /index.php/about) finissent par être les mêmes ici.Comment éviter index.php dans Zend Framework?

Cependant, /index.php/ quoi que ce soit ne devrait pas exister car c'est exactement la même ressource que/quoi que ce soit donc cela n'a pas de sens pour la duplication.

Comment éviter cela?

Même http://zendframework.com/manual/en/zend.controller.router.html et http://zendframework.com/index.php/manual/en/zend.controller.router.html existent tous les deux. Cela n'a aucun sens ...

Répondre

0

1) Ne pas lier (comme les URLs dans votre question) et laissez-le être une fonctionnalité cachée. Cela n'a pas d'importance, fondamentalement.
ou
2) Ajoutez une règle de réécriture pour supprimer /index.php de toute requête la contenant. Vous devez être sûr de le transférer à index.php afin que vous puissiez toujours le gérer, et vous voulez probablement envoyer un status code beginning with 3.

+0

Pas de liaison est une sorte de travail autour (et je « juste faire » en ce moment). Et si vous utilisez Zend Router url helper pour créer des liens internes (vraiment utiles), considérez qu'il peut suffire qu'un utilisateur aléatoire rattache index.php à un de vos liens quelque part (pour quelque raison que ce soit) et vous risquez de gaspiller des ressources avec des robots si vous utilisez des redirections comme ce que vous avez dit dans (2)). –

+0

@henriquev: les demandes de réécriture devraient être au niveau du serveur et non via Zend Router, pour gaspiller le moins de ressources. C'est la façon dont la réécriture standard est utilisée pour chaque application ZF, si vous ajoutez une règle supplémentaire pour ce cas (/index.php.*), cela n'aurait pas beaucoup d'impact. Je suppose que vous devez référencer votre application pour voir si cela vous concerne. Via le bon en-tête de redirection, votre référencement ne sera pas coupé beaucoup non plus. Autrement dit, si l'utilisateur se soucie même assez pour modifier les liens. Je pense que toute cette question est vraiment un problème. – chelmertz

0

Il semble que votre mod_rewrite ne soit pas configuré correctement (mod_rewrite est activé dans Apache, .htaccess configured properly?). Quand ce serait, vous ne devriez pas taper index.php du tout.

Edit:

RewriteEngine On 

RewriteCond %{REQUEST_URI} ^index.php [OR] 

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 
+0

Il n'a * pas * à * taper index.php mais il remarque qu'il mène à la même page lorsqu'il * tape manuellement '' index.php' manuellement. – chelmertz

+0

mod_rewrite est activé et en cours d'utilisation. Comme je l'ai dit, je peux taper ou non index.php. Alors, que font mes règles de réécriture? Ils vérifient s'il existe un fichier sur ce chemin, sinon ils redirigent vers index.php. Donc, quand il y a un /index.php bien sûr, il ne redirige pas, mais il suffit de charger l'index.php de toute façon. Mais s'il y a quelque chose comme /index.php/help cela va fonctionner comme/help. Et ça veut dire quoi? Que le problème/solution réside dans le côté PHP, plus précis: c'est quelque chose dans le routeur zend (comme s'il n'utilisait pas le chemin complet, mais un sous-ensemble de celui-ci). –

+0

J'ai ajouté l'exemple de code * non testé * à ma réponse. – takeshin