Bonjour à toutes et tous,
Merci d'avoir pris le temps de vous intéresser à mon problème.

Mes connaissances en htaccess sont basiques et dépassées par un problème que je ne parviens pas à résoudre.
Pourriez-vous partager avec moi votre expertise sur le sujet s'il vous plait ?

Le cas
Je développe un site sous ZF2.
Il est accessible à l'URL : http://www.creagite.fr

Toutes les requêtes sont traitées par un fichier index.php présent dans le dossier /public/ de mon serveur.
En local, en utilisant un virtualhost qui pointe directement vers mon dossier /public/, tout marche à merveille.

Le problème
Mon hébergeur actuel (apache) ne me permet pas de paramétrer mes virtualhost.

mondomaine.fr
|_ public_html
|_public
|_ index.php

Je tente donc de substituer mon virtualhost par un htaccess pour que mondomaine.fr pointe vers /public_html/public/.


Solution actuellement mise en place
J'ai déployé un htaccess dans /public_html/ pour forcer le pointage.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Options +FollowSymlinks -Indexes
 
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?monsite.fr$
RewriteCond %{REQUEST_URI} !^/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /public/$1
 
RewriteCond %{HTTP_HOST} ^(www.)?monsite.fr$
RewriteRule ^(/)?$ public [L]

Problème rencontré avec cette solution
Toutes mes pages sont désormais accessibles depuis plusieurs URL :
- www.monsite.fr/mapage
- www.monsite.fr/public/mapage
- www.monsite.fr/public/index.php/mapage

Je souhaiterais bien entendu que seule la première URL soit fonctionnelle, reconnue par mon application comme une route valide.

Voici le htaccess actuellement déployé dans le dossier public :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Options +FollowSymlinks -Indexes
 
RewriteEngine On
 
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^.*$ - [NC,L]
 
RewriteCond %{REQUEST_URI} !/robots\.txt$ [nocase]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]
 
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L] 
 
SetEnv APPLICATION_ENV production



Pourriez-vous s'il vous plaît m'aider à retrouver le comportement obtenu grâce aux virtualhost, où une seule URL (non composée de /public/) fonctionne ?
Merci d'avance pour votre aide.

Au plaisir de vous lire,
Omageus