8791 sujets

Développement web côté serveur, CMS

Bonjour,
Pour mon premier post sur alsa, je voudrais quelques explications concernant la mise en place d'url rewriting dynamique. Je m'explique :
J'ai plusieurs url du type :
cat/url1.php
cat/url2.php
cat/url3.php ....
se trouvant dans la même catégorie "cat"

Je veux avoir au final remplacer les chiffres à la fin de chaque url par des noms plus parlant et enlever l'extension, par ex des urls du type :
cat/url-vert (vert correspondant à 1)
cat/url-rouge.....

Et enfin faire une redirection 301 au niveau du htaccess.

Jusqu'ici j'ai dû traiter un à un les urls mais je me demande s'il y a moyen de tout traiter de manière dynamique, je ne peux pas utiliser rewritemap car je n'ai pas la main sur le serveur.

J'espère avoir été clair et merci d'avance pour vos réponses.
Si c'est une url dynamique, pour récupérer un article par exemple, il te faut conserver un identifiant (id numérique par exemple) dans ton url.

Ce qui te donnerai par exemple :
RewriteRule ^cat/url-vert-([1-9]+)$ cat/url$1.php


Si ce sont des pages en dur alors tu peux faire cela :
RewriteRule ^cat/url-vert$ cat/url1.php

Modifié par moust (24 Jan 2012 - 16:00)
Bonjour

RewriteRule ^cat/cat-([a-z_0-9\-]+)$ /cat/url.php?id=$1 [L]


avec ça, tu rediriges tous les cat/url-machin vers cat/url.php?id=machin

Après, il te reste à faire le traitement au niveau de url.php pour afficher url1.php ou url2.php selon la valeur de "id".

pour les 301, il suffit de mettre [L,R=301] à la place de [L]
Merci pour vos réponses rapides

moust a écrit :

Si ce sont des pages en dur alors tu peux faire cela :
RewriteRule ^cat/url-vert$ cat/url1.php


cat/url1.php est effectivement une url en dur, j'ai déjà fait ce que tu dis mais dans ce cas je suis obligé de traiter un à un chaque url et c'est ce que je veux éviter.

RewriteRule ^cat/url-vert$ cat/url1.php
RewriteRule ^cat/url-rouge$ cat/url2.php


kenor >> le problème avec ta solution c'est que mon url est de la forme url1.php et non url.php?id=1

Je voulais savoir si c'est possible de faire une RewriteCond sur les chiffres à la fin de l'url et si oui comment sera la syntaxe et comment faire correspondre chaque chiffre par le mot qui correspond sans obligatoirement passer par Rewritemap

Encore merci
quel est le soucis avec le fait que tes urls soient de forme url1.php ?

url.php peut très bien par exemple faire quelque chose du genre:


<?php
$arr = array(); // contenant les valeurs possibles 
/*
exemple : 
array('vert' => 1, 'orange' => 2);

(ça pourrait très bien être dans une base de donnée)

on suppose "?id=vert"
*/

if (array_key_exists($_GET['id'],$arr)) require 'url' . $arr[$_GET['id']] .'.php';

// $arr[$_GET['id']] vaut donc ... 1 et on affiche donc url1.php 
// cqfd [smile]

A tester, adapter et/ou corriger etc..
Ah ok!!!! je vois où tu veux en venir, j'ai pas tilté au début car je voulais trouver une solution dans htaccess sans traitement en php.

Je vais essayer de creuser l'idée.

Sinon s'il y a quelqu'un qui a une solution htaccess je suis preneur

MErci à tous
Modifié par frandria (24 Jan 2012 - 17:40)
Je n'ai pas proposé de solutions 100% htaccess tout simplement parce qu'il s'agit d'une très mauvaise idée en terme de performance.

En effet, le htaccess doit être interprété à chaque page affiché, y compris ceux qui n'ont strictement rien à faire des conditions. Donc tu demanderais à ton serveur de contrôler à chaque fois les divers possibilités y compris si tu affiches une page contact.php par exemple.

La solution que je te propose est spécifique au rewrite dont tu as besoin pour ces pages et ne surcharge pas inutilement le chargement des autres pages.