Aller au contenu

La réécriture à la volée


xpatval

Sujets conseillés

Bonjour,soir,

Je me plante lors d'un rewrite rule, sur un fichier pouvant différent de nom selon la navigation.

En effet, je code ainsi:

RewriteRule   ^glossaire_rech.html$   /glossaire_rech.php  [L]
RewriteRule   ^glossaire_rech-([a-z]+)\.html$   /glossaire_rech.php?let=$1&cpt=3  [L]
RewriteRule   ^glossaire_rech-([a-z]+)\.html$   /glossaire_rech.php?terme=$1  [L]

Mais plus aucun fichier ne prend l'extension html.

La première ligne existait, et le mod-rewrite fonctionnait.

Depuis que j'en ai rajouté deux, ça ne fonctionne plus. Bah pourquoi ? :nono:

Avez-vous une idée ?

xpatval

Lien vers le commentaire
Partager sur d’autres sites

Le [L] signifie qu'il faut executer la regle, et s'arreter si la regle s'applique. Il se pourrait que ce soit le cas, qu'il applique la regle, puis qu'il ne cherche pas à appliquer les autres.

Tu devrais inverser les 3 regles, mettre la première en dernier.

Lien vers le commentaire
Partager sur d’autres sites

Le [L] signifie qu'il faut executer la regle, et s'arreter si la regle s'applique. Il se pourrait que ce soit le cas, qu'il applique la regle, puis qu'il ne cherche pas à appliquer les autres.

Tu devrais inverser les 3 regles, mettre la première en dernier.

<{POST_SNAPBACK}>

Je ne pense pas que ce soit le problème, vu que sa rewrit-cond n°1 est bien distincte des 2 autres, et ne peut pas les englober...

Remarque : dans les conds, il faut échapper le .html -> \.html (car tu recherche bien .html et pas [n'importe quel caractere]html )

Cordialement,

Lien vers le commentaire
Partager sur d’autres sites

Ca y est, je suis complètement paumé !!

même en enlevant les deux lignes supplémentaires, la première ne fonctionne plus... :nono:

Le mod_rewrite s'applique même s'il y a passage de paramètres via méthod=post ?

Je vais me coucher :dots:

A demain.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

J'en reviens à mes soucis de rewriting...Cette fois-ci, cette ligne

RewriteRule   ^glossaire_rech_([a-z]+)\.html$   /glossaire_rech.php?let=$1&cpt=3  [L]
fonctionne bien en local, mais absolument pas en ligne (erreur 404)

Est-ce normal ?

xpatval

Modifié par xpatval
Lien vers le commentaire
Partager sur d’autres sites

Essaies avec:

RewriteRule   glossaire_rech_([a-z]+)\.html   glossaire_rech.php?let=$1&cpt=3  [L]

C'est vraisemblablement le caractère ^ qui empêche le match, vu que Apache doit envoyer des caractères avant celui-là (par exemple un / ) qui suffisent pour que la règle ne soit pas vérifiée. :)

Dan

Lien vers le commentaire
Partager sur d’autres sites

En fait, à force de triturer mon seul neurone, j'en arrive à cette hypothèse qu'est la différence de version d'Apache.

En effet, en local, comme je le disais précédemment, ce code fonctionne:

RewriteRule   ^glossaire_rech_lettre_([a-z]+)\.html$   /glossaire_rech.php?let=$1&cpt=3  [L]

(j'ai rajouté le terme "lettre"). Mais ne fonctionnait pas en ligne.

Bien entendu, comme nous sommes seuls fautifs de ce que l'on code, je me suis aperçu (tard) que le param de la variable $1 est en majuscule. Je modifie ma ligne en conséquence:

RewriteRule   ^glossaire_rech_lettre_([A-Z]+)\.html$   /glossaire_rech.php?let=$1&cpt=3  [L]

Content suis-je, car cela résoud mon problème, en ligne. Mais plus en local, car cela ne fonctionne plus... :whistling:

Donc, j'en déduis que le flag [NC] va m'enlever cette épine: c'est chose faite.

Alors, soucis dû à la différence de version, ou pas ?

De plus, deux autres règles me font cogiter sans succès:

RewriteRule   ^glossaire_rech_terme_([A-Z]+)\.html$   /glossaire_rech.php?terme=$1  [NC,L]

où le $1 = Référence.

Y-a-t-il une règle spécifique pour les caractères accentués ?

Et celle-ci, où certains paramètres peuvent avoir un underscore ($1 = café_chocolat)

^contact_([a-z]+)\.html$  /contact.php?ask=$1  [L]

Que dois-je rajouter après ([a-z]+) ?

merci,

xpatval

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)
As-tu lu mon post précédent ?

On ne dirait pas !

Fort heureusement, oui, car à quoi me servirait-il de poster des questions, si je n'applique pas les réponses que l'on peut me suggérer... ;)

Mais celle que tu me donnais n'a pas eu de succès. J'ai donc remis les ^ et $ et ajouté le flag [NC].

xpatval

Modifié par xpatval
Lien vers le commentaire
Partager sur d’autres sites

Et le / devant la deuxième partie... tu l'avais enlevé ? Parce que sur un hébergement mutualisé tu n'as pas accès à la racine du serveur ;)

Lien vers le commentaire
Partager sur d’autres sites

Et le / devant la deuxième partie... tu l'avais enlevé ?

Oui, absolument, mais c'est une 404 qui se produit.

xpatval

Lien vers le commentaire
Partager sur d’autres sites

Mon cher Dan, pour une fois que tes connaissances sont mises en défaut (ce qui est rare, je l'avoue, et te le concède [cirage de pompes]), là encore c'est une 404 qui apparaît.

Mais en ce qui concerne cette règle précise, je disais plus haut que j'avais résolu ce problème grâce au flag [NC]... ;)

Ce sont les deux autres qui m'ennuient toujours..hum...

xpatval

Lien vers le commentaire
Partager sur d’autres sites

OK, j'avais mal lu l'intégralité...

Dans ce cas il faut remplacer tes règles par:

RewriteRule   ^glossaire_rech_terme_(.+)\.html$   /glossaire_rech.php?terme=$1  [L]

et

RewriteRule ^contact_(.+)\.html$  /contact.php?ask=$1  [L]

pour être plus générique et permettre les caractères accentués et l'underscore.

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Ah, là je te retrouve ;)

Mais, car il y en a forcément un, me reste deux questions:

Référencement ($1 de la règle) devient rã©fã©rencement.^Pour le requête qui suit, c'est le bide. Est-ce du à l'encodage ? (dans mon cas, le charset est iso-88-59-1)?

Est-il possible de placer un commentaire dans le .htaccess ?

Merci à toi pour les règles, et la patience.

xpatval

Modifié par xpatval
Lien vers le commentaire
Partager sur d’autres sites

iso-88-59-1 n'exite pas... c'est iso-8859-1 ;)

Mais les caractères accentués dans l'URL sont une très mauvaise pratique. Il faut que tu fasses de l'encodage plutôt que de les transmettre tels quels (urlencode()).

Lien vers le commentaire
Partager sur d’autres sites

Oui, c'est ce que j'ai fait, mais l'url a une sale tronche

/glossaire_rech_terme_R%E9f%E9rencement.html
... :huh:
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...