Remplacer un virtualhost par un htaccess (mutualisé)
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
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:
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:
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