Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/09/2011, 04h39   #1
Invité de passage
 
Inscription : juillet 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 7
Points : 0
Points : 0
Par défaut rewriting url: l'incompétence

Bonjourà tous,

Désolé tout d'abord d'arriver ici avec une question de parfait débutant, mais ce n'est pas faute d'avoir cherché une solution un peu partout.
J'ai joué avec pendant quelques heures, fureté à droite et à gauche mais bon, là.....
J'ai essayé de faire l'explication la + complète possible de ce qui m'arrive mais dans ces moments de grande solitude, on n'est rarement très méthodique !

Dans mon htaccess(j'utilise CMSMS) j'ai mis en place le rewriting url sans souci + les filtrages qui vont bien.
VOICI MON HTACCESS
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#Options -Indexes
RewriteEngine On
# RewriteBase /

--------------------------MA SYNTAXE DESOLANTE--------------------------------------------


RewriteCond %{REQUEST_URI} ^/ensemble/expertise/([0-9]+)/25/([a-z0-9-]+).*$ 
RewriteRule ^(.*)ensemble/expertise/([0-9]+)/25/([a-z0-9-]+).*$ http://www.monsite.com/index.php?page=groupe-expert&clefville=$1&clefgroupe=25 [L,R=301]


---------------------------------------------------------------------------------------------



RewriteRule ^formations-informatiques/([0-9]+)/([0-9]+)/([a-z0-9-]+)\.html$ /index.php?page=groupe-expert&clefville=$1&clefgroupe=$2 [QSA]
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^(.+)$ index.php?page=$1 [QSA]

# URL Filtering helps stop some hack attempts
#IF the URI contains a "http:"
RewriteCond %{QUERY_STRING} http\: [OR]

#OR if the URI contains a "["
RewriteCond %{QUERY_STRING} \[ [OR]

#OR if the URI contains a "]"
RewriteCond %{QUERY_STRING} \] [OR]

#OR if the URI contains a "<script>"
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]

#OR script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]

#OR any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]

#IF the URI contains UNION
RewriteCond %{QUERY_STRING} UNION [OR]

#OR if the URI contains a *
RewriteCond %{QUERY_STRING} \*

#then deny the request (403)
RewriteRule ^.*$ - [F,L]

# End URL Filtering

# force le passage a utilisation php5
SetEnv PHP_VER 5
SetEnv REGISTER_GLOBALS 0
# No sense advertising what we are running
ServerSignature Off
Dans mon nouveau site(sous cmsms) je passe 2 paramètres à une page sous la forme suivante :


index.php?page=groupe-expert&clefville=22&clefgroupe=49

Les url de mon ancien site(développé à la main à l'époque héroique) étaient de la forme suivante:
Code :
http://www.monsite.com/ensemble/expertise/22/25/nomfichier.html

La variable clefville reste la même, la table qui gère les villes est identique, par contre les clefgroupe ont changé- ici l'ancien était 49 et il passe à 25 pour l'exemple)
En clair je rentre le nouvel id "clefgroupe" en dur mais j'essaie de repêcher dans l'url l'id "clefville"

J'ai donc rajouté :
Code :
1
2
RewriteCond %{REQUEST_URI} ^/ensemble/expertise/([0-9]+)/25/([a-z0-9-]+).*$ 
RewriteRule ^(.*)ensemble/expertise/([0-9]+)/25/([a-z0-9-]+).*$ http://www.monsite.com/index.php?page=groupe-expert&clefville=$1&clefgroupe=25 [L,R=301]
et voilà ce que j'obtiens:

Code :
http://www.monsite.com/index.php?page=groupe-expert&clefville=&clefgroupe=25
En gros, je suis incapable de lui faire récupérer la première variable (clefville) contenue dans l'url pour lui faire réécrire cette variable dans mon Rewrite Rule.
Merci à tous pour votre aide
padoberg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2011, 21h20   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 293
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 293
Points : 8 579
Points : 8 579
C'est normal : le premier groupe entre parenthèses du premier membre de la RewriteRule est (.*), donc $1 ne vaut jamais rien car la RewriteCond qui précède cette règle fait en sorte que l'URL commence toujours par ensemble/expertise.

Donc soit tu utilises $2 et $3 respectivement à la place de $1 et $2, soit tu retires les parenthèses (.*) qui ne servent strictement à rien.

Au passage, ta condition ne sert à rien car ce qu'elle vérifie est vérifié de la même façon par ton filtre de RewriteRule. Donc retire aussi la RewriteCond qui ne sert à rien.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 11h39   #3
Invité de passage
 
Inscription : juillet 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 7
Points : 0
Points : 0
Par défaut Résolu

Merci mille fois! Cela fonctionne ! Cela m'enlève une bonne épine du pied. C'est tellement évident, j'ai honte... J'ai repris l'expression en l'adaptant et je n'ai pas repéré que le premier groupe entre parenthèses était identifié comme première variable.
Petite question de vrai débutant: d'un point de vue structure du coup dans quel cas utilise-t-on "RewriteCond" en plus du filtre dans RewriteRule puisque la syntaxe (lorsqu'on la connaît....) permet de faire des filtres assez complexes uniquement avec la RewriteRule ? Dernière question enfin, j'en profite, existe-t-il un vrai bon bouquin sur le paramétrage des htaccess. Sur le web j'ai trouvé quelques ressources mais souvent lacunaires et incomplètes.
Vraiment merci, là vous me sauvez la mise !
padoberg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 12h36   #4
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 293
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 293
Points : 8 579
Points : 8 579
Citation:
Envoyé par padoberg Voir le message
d'un point de vue structure du coup dans quel cas utilise-t-on "RewriteCond" en plus du filtre dans RewriteRule puisque la syntaxe (lorsqu'on la connaît....) permet de faire des filtres assez complexes uniquement avec la RewriteRule ?
Ben lorsqu'on ne peut pas se contenter du filtre de RewriteRule, comme par exemple lorqu'on veut vérifier aussi un paramètre d'URL, le nom d'hôte, si on est en HTTPS ou pas, etc.

Citation:
Envoyé par padoberg Voir le message
Dernière question enfin, j'en profite, existe-t-il un vrai bon bouquin sur le paramétrage des htaccess.
Aucune idée
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h39.


 
 
 
 
Partenaires

Hébergement Web