Mod_Rewrite

Eléphant du PHP | 214 Messages

15 juin 2010, 18:04

le display_errors = On
et le error_reporting je l'ai pas
en faisant print_r($_GET); n'affiche rien
et j'ai constate qu'au 3eme parametres les variables ne s'affichent pas
en faisant:
(\w+)-(\w+)-([\w\._-]+)
voila
RewriteRule ^(\w+)-(\w+)-([\w\._-]+)-([\w\._-]+).html$ index.php?rub=$1&srub=$2&cat=$3&id_sscat=$4 [L]
ca ne change rien

ViPHP
ViPHP | 5462 Messages

15 juin 2010, 18:10

print_r($_GET);
devrais te retourner au moins :
array()

t'as pas échappé le point de .html non plus
(\w+)-(\w+)-([\w\._-]+)-([\w\._-]+)\.html
si y'a un - dans tes valeurs il va pas comprendre non plus

Eléphant du PHP | 214 Messages

15 juin 2010, 19:01

Pourquoi il ne recupere pas les valeurs de GET a partir de la 3eme position, par exemple:
RewriteRule ^(\w+)-(\w+)-([\w\._-]+)\.html$ index.php?rub=$1&srub=$2&idmcat=$3 [L]

$rub = $_GET['rub'];
$srub = $_GET['srub'];
$idmcat = $_GET['idmcat'];
echo 'rub'.$rub.'<br>';
echo 'srub'.$srub.'<br>';
echo 'idmcat'.$idmcat.'<br>';
Il affiche la valeur de rub et srub alors que le idmcat ne s'affiche pas

Eléphant du PHP | 214 Messages

15 juin 2010, 19:04

J'ai meme change le htaccess de la ligne vers:
RewriteRule ^(\w+)-(\w+)-([0-9]+)\.html$ index.php?rub=$1&srub=$2&idmcat=$3 [L]
etant que l'id est un nombre, mais toujours n'apparait pas en mettant echo $idmcat

en mettant print_r($_GET), ca me donne:
Array ( [rub] => marub [srub] => masrub [cat] => 1 )

ViPHP
ViPHP | 5462 Messages

15 juin 2010, 19:18

Pourquoi il ne recupere pas les valeurs de GET a partir de la 3eme position, par exemple:
RewriteRule ^(\w+)-(\w+)-([\w\._-]+)\.html$ index.php?rub=$1&srub=$2&idmcat=$3 [L]

$rub = $_GET['rub'];
$srub = $_GET['srub'];
$idmcat = $_GET['idmcat'];
echo 'rub'.$rub.'<br>';
echo 'srub'.$srub.'<br>';
echo 'idmcat'.$idmcat.'<br>';
Il affiche la valeur de rub et srub alors que le idmcat ne s'affiche pas
tu devrais peu etre changé de drapeaux si ta plein de regle dans ton .htaccess

Eléphant du PHP | 214 Messages

15 juin 2010, 20:21

tu devrais peu etre changé de drapeaux si ta plein de regle dans ton .htaccess
Voila ce que j'ai:

J'ai meme change les id (etant numeriques) par des episodes:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(\w+).html$ index.php?rub=$1 [L]
RewriteRule ^(\w+)-(\w+).html$ index.php?rub=$1&srub=$2 [L]
RewriteRule ^(\w+)-(\w+)-([\w._]+).html$ index.php?rub=$1&srub=$2&barnamaj_en=$3
RewriteRule ^(\w+)-(\w+)-([\w._]-([\w._])+).html$ index.php?rub=$1&srub=$2&barnamaj_en=$3&episode_en=$4

ViPHP
ViPHP | 5462 Messages

15 juin 2010, 20:30

faut échapper tes caractères (ducoup elle sont toute fausse et y'a d'autre erreurs), et mettre drapeau a chaque ligne

EDIT : tu peux le faire en 1 seule expression pour les 4 cas :wink:

Eléphant du PHP | 214 Messages

15 juin 2010, 23:18

Maintenant il affiche la page 404 du server XAMPP, voila le code htaccess:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(\w+)\.html$ index.php?rub=$1 [L]
RewriteRule ^(\w+)-(\w+)\.html$ index.php?rub=$1&srub=$2 [L]
RewriteRule ^(\w+)-(\w+)-([\w\._]+)\.html$ index.php?rub=$1&srub=$2&barnamaj_en=$3 [L]
RewriteRule ^(\w+)-(\w+)-([\w\._-]-([\w\._-])+)\.html$ index.php?rub=$1&srub=$2&barnamaj_en=$3&episode_en=$4 [L]

ViPHP
ViPHP | 5462 Messages

15 juin 2010, 23:27

le 4eme n'est pas bon c'est

Code : Tout sélectionner

^(\w+)-(\w+)-([\w\._-]+)-([\w\._-]+)\.html$
tu peux aussi enlever les _ puisqu'ils sont compris dans \w

sinon en 1 seul coup tu pourrais faire

Code : Tout sélectionner

RewriteEngine On RewriteRule ^([^-]+)(?:-([^-]+))?(?:-([^-]+)(?:-([^-]+))?)?\.html$ index.php?rub=$1&srub=$2&barnamaj_en=$3&episode_en=$4 [L]

Eléphant du PHP | 214 Messages

15 juin 2010, 23:46

Alors la j'ai rien pige, ca marche, je voudrais comprendre ce truc la

ViPHP
ViPHP | 5462 Messages

15 juin 2010, 23:52

Alors la j'ai rien pige, ca marche, je voudrais comprendre ce truc la
:wink:
^([^-]+)(?:-([^-]+))?(?:-([^-]+)(?:-([^-]+))?)?\.html$

([^-]+) : n'importe quel chaine qui ne contient pas de -
(?:-([^-]+))? : (?:) c'est pour dire que c'est non capturant donc ca sera pas dans un groupe ($n), -([^-]+) un tiret suivis de n'importe quel chaine qui ne contient pas de -, et ? pour dire qui existe eventuelement


mais en comme ca, ca serai plus simple a comprendre
^([^-]+)(?:-([^-]+))?(?:-([^-]+))?(?:-([^-]+))?\.html$
on a bien nos 4 groupes séparés
([^-]+)
(?:-([^-]+))?
(?:-([^-]+))?
(?:-([^-]+))?



EDIT : tu peux tester ici si tu veux http://gskinner.com/RegExr/ (onglet replace)

Eléphant du PHP | 214 Messages

16 juin 2010, 18:18

Je voudrais savoir un petit eclaircissement, quand je fais un print_r($_GET), j'obtien un resultat comme suite:
Array ( [rub] => ma_rub [srub] => ma_srub[cat] => ma_cat-ma_scat) 
Alors la structure de mon lien est:
rub-srub-cat-scat
cat et s_cat prennent la meme position, en clair:
sport-foot-club-joueur
resultat du array donne:
Array ( [rub] => sport [srub] => foot[cat] => club-joueur )

ViPHP
ViPHP | 5462 Messages

16 juin 2010, 18:51

moi avec un htaccess comme ca
RewriteEngine On
RewriteRule ^([^-]+)(?:-([^-]+))?(?:-([^-]+))?(?:-([^-]+))?\.html$ index.php?rub=$1&srub=$2&cat=$3&scat=$4 [L]
et un lien comme ca : sport-foot-club-joueur.html

j'ai
Array
(
    [rub] => sport
    [srub] => foot
    [cat] => club
    [scat] => joueur
)

Eléphant du PHP | 214 Messages

16 juin 2010, 19:38

Ca me donne toujours le meme resultat, mais par contre si je le met tout seul ca marche, si je le precede par d'autres Rewrite ca marche pas:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(\w+)\.html$ index.php?rub=$1 [L]
RewriteRule ^(\w+)-(\w+)\.html$ index.php?rub=$1&srub=$2 [L]
RewriteRule ^(\w+)-(\w+)-([\w\._-]+)\.html$ index.php?rub=$1&srub=$2&barnamaj_en=$3 [L]
RewriteRule ^([^-]+)(?:-([^-]+))?(?:-([^-]+))?(?:-([^-]+))?\.html$ index.php?rub=$1&srub=$2&cat=$3&scat=$4 [L]

Eléphant du PHP | 214 Messages

16 juin 2010, 19:59

En faisant un lien normal, ca marche bien:
a href="index.php?rub=Mariyat&srub=marub&cat='.$ma_cat.'&scat='.$ma_scat.'">lien</a>