Il n'y a aucun caractère spécial là à échapper, surtout que cette partie n'est même pas une expression régulière donc il n'y a même pas lieu de trouver le moindre échappement en premier lieu. De surcroît, ni le : ni le / ne sont des métacaractères dans une expression régulière. Le / n'a besoin d'être échappé que s'il était le délimiteur de l'expression régulière or Apache n'en utilise pas, ce qu'on voit très bien ici/aussi.
> En réalité, je cherche à faire une réécriture de tous mes sous domaines d'un domaine à un autre sans savoir quel est le sous domaine renseigné.
Ca ne sera pas une réécriture mais une redirection (pas le bon terme employé ?) à moins d'une sous-arborescence commune ou alors d'effectuer la réécriture depuis la configuration d'Apache (pas un .htaccess).
Admettons que ce soit une redirection, ce qui donnerait déjà une idée, ce serait :
Du coup les points doivent-ils être échappé (les espaces aussi je crois) ? Dans ce cas là pourquoi que la condition et non sur la règle ?
J'ai fait toutes mes règles sans échappement et ca fonctionnement visiblement... Il est mieux de mettre les échappement ?
En tous cas merci pour ton retour. Ces quelques détail de compréhension sont très difficile à trouver et j'aime comprendre les choses, histoire de ne pas faire de copier coller bêtement.
> Le .* devrait signifier tous les caractères (même si il n'en s'y trouve pas) ?
Oui.
> Le .+ devrait signifier tous les caractères à condition qu'il y en ait au moins un ?
Oui. La différence entre .* et .+ c'est que la première accepte la chaîne vide/rien quand la seconde non.
> Du coup les points doivent-ils être échappé ?
Si tu as effectivement lu et compris une doc quelconque au sujet des regex, . signifie tout caractère (excepté \n mais c'est un détail) donc si tu veux spécifiquement un caractère point, ben, tu l'échappes pour qu'il perde ce sens de métacaractère et redevienne littéral.
> les espaces aussi je crois
Non, les espaces, si on les échappe ce n'est pas pour la même raison. Ca n'a rien à voir avec les regexps, c'est pour Apache lui-même : si tu as a b, pour lui ça vaut comme 2 paramètres a et b. Si on veut un (seul) paramètre de valeur a b il faut écrire a\ b ou "a b".
> Il est mieux de mettre les échappement ?
Là [les échappements au niveau de RewriteCond] on veut un caractère point, pas n'importe quel caractère. Sans ses échappements, ça fonctionnera mais tu pourrais accepter des trucs comme bidule_domaine_secondaire-fr.
Et inversement, si tu en mets où il n'en faudrait pas, tu prends le risque soit de changer totalement le sens de ta regexp (par exemple n'accepter qu'un caractère précis au lieu d'une répétition) soit d'en faire apparaître où tu n'en souhaites pas étant littéraux.
> Dans ce cas là pourquoi que la condition et non sur la règle ?
Parce qu'il faut comprendre le fonctionnement des directives RewriteCond et RewriteRule : si tu regardes leur doc, tu verras que le premier argument de RewriteRule et le deuxième de RewriteCond sont des expressions régulières (sauf s'ils débutent par = ou !=) donc . et \. sont deux choses différentes. Leurs autres arguments ne sont pas des expressions régulières mais des chaînes littérales (avec substitution des variables de réécriture) dès lors échapper comme s'il s'agissait d'une regexp n'a même pas lieu d'être.
Merci beaucoup pour tes précisions. Ça clarifie beaucoup les choses.
Je n'ai pas encore tout bien saisie en détail les echappements/regexp mais j'ai déjà compris le principe.
Merci pour ton partage du savoir ;-)
.htaccess : RewriteCond / ReWriteCond
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli