Aller au contenu

Sujets conseillés

Posté

Bonjour à tous,

depuis quelques temps je commence a m'intéresser à l'url rewriting. J'ai fais quelques essais mais tous infructueux.

J'ai lu l'article http://www.webmaster-hub.com/publication/article5.html et j'ai fait le test avec ceci:

Options +FollowSymlinks
RewriteEngine on
RewriteRule   ^nexistepas.html$   trouve.html  [L]

Cela marche tres bien.

J'ai un site qui utilise des adresse comme celle-ci:

http://www.monsite.com/index.php?page=variable

et j'aimerais utilisé l'url rewriting pour avoir ceci:

http://www.monsite.com/variable.html

Est-ce possible?

Si cela n'est pas possible, serait-il mieux d'utiliser /index/variable.html ou /index-variable.html ?

J'ai fais un test avec ce code-ci dans mon fichier .htaccess:

ErrorDocument  404  /erreur404.htm

RewriteEngine on
RewriteRule ^index-([a-z]+).html$  index.php?page=$1  [L]

Je n'obtient aucune erreur mais cela ne fonctionne pas...

Bref quelqu'un aurait-il des idées ou des réponses à me suggérer? :unsure:

Merci à l'avance! :)

Posté

Bonsoir,

Tu n'étais pas loin... si tu veux pouvoir accéder à ta page en écrivant le nom de la variable suivi de ".htm" il faut procéder ainsi :

ErrorDocument  404  /erreur404.htm

RewriteEngine on
RewriteRule ^(.+)\.html$  index.php?page=$1  [L]

Les points qui ont changé :

  • index-([a-z]+) est devenu (.+) qui signifie au moins un caactère ou plus quel qu'il soit... (tu vera souvent (.*) ..cela permet de définir "n'importe quel caractère ou même aucun"...c'est très utile !)
  • .html est devenu \.html car le "." s'il n'est pas échappé avec un antislash correspond à la classe de caractères "tous les caractères"...en l'occurrence tu veux l'interpréter comme un simple point ;)

Si tu le souhaites tu peux conserver ([a-z]+), mais cela limite à uniquement de caractères compris entre a et z ...et surtout en minuscules. Tu peux soit ajouter [a-zA-Z] ou ajouter un flag à la fin de la règle : [L,NC] (ou NC signifie Not Case-sensitive)

Posté (modifié)

Cool merci de l'explication! Avec tes conseil j'ai fait ceci et ca marche:

RewriteEngine on
RewriteRule   ^([a-z0-9]+)\.html$ /index.php?page=$1 [L]

Par contre je me suis rendu compte que j'avais d'autre sorte d'url à réécrire de ce type là:

monsite.com/index.php?page=variable&sm=variable

Et je veux que cela me donne ceci: /variable_variable.html

( Dans les faits j'ai: monsite.com/index.php?page=chiots_1&sm=2 par exemple)

Là je vais avouer que je ne suis pas trop sûr de la règle à écrire. J'ai essyer ceci mais cela ne fonctionne pas:

RewriteEngine on
RewriteRule   ^([a-z0-9]+)_([0-9]+)\.html$ /index.php?page=$1&sm=$2
RewriteRule   ^([a-z0-9]+)\.html$ /index.php?page=$1 [L]
ErrorDocument  404  /erreur404.htm

Des idées?

Modifié par marcandre
Posté (modifié)

Ca ne fonctionne pas non plus...

Le code sur ma page:

<ul class="menu">
<li>
<a href="./chiots-0.html"<?if ($sm=="1")
{print (" id='current'");}?>>Minutes</a>
</li>

...le reste du menu...

</ul>

Et mon .htaccess:

RewriteEngine on
RewriteRule   ^(.*)\-(.*)\.html$ /index.php?page=$1&sm=$2 [L]
RewriteRule   ^([a-z]+)\.html$ /index.php?page=$1 [L]
ErrorDocument  404  /erreur404.htm

Et on peux voir le tout ici en cliquant sur le bouton ''Minutes''

EDIT ===> ce qui est bizarre c'est que la page chiots.html et chiots-1.html pointent a la meme place... et peut importe que j'écrive chiots_1(ou 2, 3, 4, 5, 6, etc.) ca affiche toujours la meme page mais le le surlignage dans le menu change...

Modifié par marcandre
Posté

Problème réglé... en partie!

En appelant les page comme suit:

/chiots_0_1.html

Cela fonctionne avec ce code dans le .htaccess:

RewriteEngine on
RewriteRule ^(.*)_([0-9])\.html$ /index.php?page=$1&sm=$2 [L]
RewriteRule   ^([a-z]+)\.html$ /index.php?page=$1 [L]
ErrorDocument  404  /erreur404.htm

Bizarre...mais ca fonctionne :fou:

Posté

Tu peux utiliser le caractère "-" sans l'échapper avec un antislash dans tes règles...

Si tu veux testé un règle, tu as un moyen simple de voir où est redirigé (en interne)... en ajoutant le flag "R=301" à ta règle...ainsi aulieu d'effectuer la redirection en interne elle sera faite par une redirection HTTP avec status 301 ce qui te permet de voir l'URL qui est en fait utilisée, dans ta barre d'adresse.

Par exemple :

RewriteEngine on
RewriteRule   ^(.*)-([0-9]+)\.html$ /index.php?page=$1&sm=$2 [L,R=301]
RewriteRule   ^([a-z]+)\.html$ /index.php?page=$1 [L]
ErrorDocument  404  /erreur404.htm

J'ai changé ta règle un peu, vu que ton deuxième paramètre est numérique normalement, c'est mieux de forcer ceci et tu avais oublié le "+" indiquant que tu permet plus d'un chiffre (enfin je ne sais pas si c'est le cas..mais généralement c'est le cas)...ça évitera que ta règle accepte plus de requêtes que ce qui est nécessaire...

Tu as une liste de flag et syntaxes possibles sur cette page du manuel Apache.

Posté

De rien :) C'est pas pour rien que le Hub à bonne réputation...et on compte bien que tu partages des connaissances (sur ce sujet au d'autres) dès que l'occasion se présentera à toi.

Veuillez vous connecter pour commenter

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



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