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
Partager