Configuration d'un htaccess

Le problème exposé dans ce sujet a été résolu.

Hello tout le monde !

J'aurais besoin d'un coup de main pour configurer un fichier .htaccess.

Voici la situation des dossiers :

1
2
3
4
5
/root
    /mandarine
    .htaccess
    clementine.php
    index.php

Explications…

  1. des noms de domaines qui (via les vhost) pointent vers un même dossier root
  2. dans le dossier un fichier index.php
  3. dans le dossier un .htaccess qui dit que tout ce que je passe en paramètre dans mes noms de domaines sont passés en un paramètre à ma page index.php.

Exemple :

1
2
3
http://domaine1.com/foo --> index.php?parametre=foo
http://domaine2.com/biz --> index.php?parametre=biz
...

Le .htaccess :

1
2
3
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^([^/.]+)/?$ index.php?parametre=$1 [L]

Jusque là rien de compliqué, de ce fait tout fonctionne.


Maintenant je rajoute un fichier clementine.php dans le dossier root et j'ai dit dans mon vhost que si j'arrive depuis un sous-domaine et domaine précis (exemple : clementine.domaine3.com), je vais toujours dans mon dossier root, mais sur la page clementine.php (pour cela j'utilise l'instruction DirectoryIndex clementine.php.

Jusque là rien de compliqué non plus : tout fonctionne.


Maintenant (et c'est ici ma question), je souhaiterais que si je passe un paramètre précis à ce sous-domaine (exemple : clementine.domaine3.com/mandarine), j'aille dans le dossier mandarine sans toutefois rentrer en conflit avec ma règle "universelle" qui dit que les paramètres de mes domaines vont vers index.php.

Une idée ?

Merci de m'avoir lu :)

+0 -0

En effet, je pense que le flag L est ce qu'il te faut : il empêche toute RewriteRule suplémentaire, la règle est la dernière (Last) à affecter la requête. La doc.

tleb

C'est bien de pointer une doc, mais encore faudrait-il soi-même la lire et la comprendre : L(ast) n'est absolument pas une fin définitive à la réécriture comme le réalise le flag End, introduit par la 2.4. Il ne met fin qu'au processus de réécriture courant or s'il y a une règle appliquée, cette nouvelle adresse démarre un nouveau processus de réécriture : sur un .htaccess, si une règle renvoie sur une autre ressource du même répertoire, on en retrouve le .htacces donc ses règles. D'où les boucles que beaucoup ne comprennent pas. Et encore, il y a des situations où Apache ne reconnaît pas que l'adresse est inchangée.

Ici, ce qui compte en premier lieu c'est le fait qu'il s'agisse d'une règle de non réécriture (le - qui dit de ne rien faire si ça matche). L(ast) n'est que le second élément de la solution : il met, ici, fin au processus courant de réécriture (sinon on continue pour matcher l'autre, ce qui la rend inutile) et vu que rien ne matche, Apache ne va pas plus loin (pas de nouveau processus de réécriture).

J'ai une préfèrence pour les règles de non-réécriture personnellement, ça permet de garder l'idée du .htaccess, ses chemins relatifs, et de ne pas avoir des RewriteCond trop complexes pour une même règle mais on doit pouvoir écrire la même chose en condition de l'autre :

1
2
RewriteCond %{HTTP_HOST} !=clementine.domaine3.com
RewriteCond $0 !=mandarine

Par contre, il faut éventuellement adapter le test, j'ai mis exactement "mandarine" ; s'il faut permettre mandarine et son arborescence, il faut changer (^mandarine$ => ^mandarine(?:/|$) ; !=mandarine => !^mandarine(?:/|$)).

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte