Réécriture en boucle partielle.
12 messages
• Page 1 sur 1
Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics
- HyWaN
- Nouveau WRInaute

- Messages: 14
- Inscription: 4 Juil 2005
Réécriture en boucle partielle.
Bonjour
J'aimerais savoir si c'est possible d'avoir le comportement suivant avec le moteur de réécriture d'URL d'Apache (1 si possible, 2 sinon) :
Je parle de boucle partielle car le début est fixé (module et action), on extrait ensuite n paramètres avec n valeurs par la suite, c'est à ce moment que je pensais utiliser une boucle.
Merci
.
J'aimerais savoir si c'est possible d'avoir le comportement suivant avec le moteur de réécriture d'URL d'Apache (1 si possible, 2 sinon) :
- Code: Tout sélectionner
/module/action/param1-value1/param2-value2/.../paramn-valuen/
?module=<module>&action=<action>&<param1>=<value1>&<param2>=<value2>&...&<paramn>=<valuen>
Je parle de boucle partielle car le début est fixé (module et action), on extrait ensuite n paramètres avec n valeurs par la suite, c'est à ce moment que je pensais utiliser une boucle.
Merci
- Vap
- WRInaute passionné

- Messages: 1090
- Inscription: 17 Juin 2007
Re: Réécriture en boucle partielle.
HyWaN a écrit:Bonjour
J'aimerais savoir si c'est possible d'avoir le comportement suivant avec le moteur de réécriture d'URL d'Apache (1 si possible, 2 sinon) :
- Code: Tout sélectionner
/module/action/param1-value1/param2-value2/.../paramn-valuen/
?module=<module>&action=<action>&<param1>=<value1>&<param2>=<value2>&...&<paramn>=<valuen>
Je parle de boucle partielle car le début est fixé (module et action), on extrait ensuite n paramètres avec n valeurs par la suite, c'est à ce moment que je pensais utiliser une boucle.
Merci.
Je ne sais pas encore, j'ai peut etre un idée mais il faut que je teste. Par contre, si tu utilise / comme séparateur, il faut que les répertoires existent réellement... En effet Apache va chercher s'il y a un .htaccess dedans.
- Vap
- WRInaute passionné

- Messages: 1090
- Inscription: 17 Juin 2007
J'ai testé en local ce qui suit. Tu dois pouvoir l'étendre pour couvrir tes besoins. Pour faire une boucle, je passe par une redirection externe.
Par exemple, -http://localhost/module1/par1-val1/par2-val2 est réécrit en -http://localhost/module1/?par1=val1&par2=val2 avec cette règle.
- Code: Tout sélectionner
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)/(.*)-(.*)/$ http://localhost/$1?$2=$3&%1 [R=301]
Par exemple, -http://localhost/module1/par1-val1/par2-val2 est réécrit en -http://localhost/module1/?par1=val1&par2=val2 avec cette règle.
- HyWaN
- Nouveau WRInaute

- Messages: 14
- Inscription: 4 Juil 2005
Bonsoir
,
en fait ce n'est pas exactement mon problème. C'est un peu plus compliqué que ça en réalité.
Voilà, je vais montrer à partir d'exemples.
Voilà où j'en suis exactement. Un ami est venu à mon aide, et il a trouvé ceci :
ça fonctionne mais pas jusqu'au bout. Je m'explique. Voici une page de test :
Voici les résultats :
En gros, on est bloqué
.
Est-ce que le fait d'avoir les logs serait utile ?
Merci
.
en fait ce n'est pas exactement mon problème. C'est un peu plus compliqué que ça en réalité.
Voilà, je vais montrer à partir d'exemples.
- Code: Tout sélectionner
soit
http://localhost/litterature/papier/format-b5/autre-blabla/../parn-valn/
qui deviendrait :
http://localhost/index.php?module=litterature&action=papier&format=b5&autre=blabla&..&parn=valn
Voilà où j'en suis exactement. Un ami est venu à mon aide, et il a trouvé ceci :
- Code: Tout sélectionner
RewriteEngine On
RewriteBase /test_rewrite/
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-z]+)-([a-z]+)/(.+?/)?index.php $3index.php?%1&$1=$2 [N,NC]
RewriteRule ^([a-z]+)/([a-z]+)/(.*?/)? $3index.php?module=$1&action=$2 [N,NC]
RewriteRule ^([a-z]+)/(.*?/)? $2index.php?module=$1 [N,NC]
ça fonctionne mais pas jusqu'au bout. Je m'explique. Voici une page de test :
- Code: Tout sélectionner
<?php
header('Content-type: text/plain');
print_r($_GET);
echo getcwd() . "\n";
echo __FILE__;
Voici les résultats :
- Code: Tout sélectionner
http://localhost/test_rewrite/AA/
Array
(
[module] => AA
)
// je passe les valeurs de getcwd et __FILE__ elles sont correctes, à savoir qu'on est bien sur l'index.
http://localhost/test_rewrite/AA/BB/
Array
(
[module] => AA
[action] => BB
)
http://localhost/test_rewrite/AA/BB/a-b/
Array
(
[module] => AA
[action] => BB
[a] => b
)
http://localhost/test_rewrite/AA/BB/a-b/c-d/
Array
(
[module] => AA
[action] => BB
[a] => b
)
// rien de plus, il ne considère pas c-d
// il ne considère plus rien par là suite.
En gros, on est bloqué
Est-ce que le fait d'avoir les logs serait utile ?
Merci
- Vap
- WRInaute passionné

- Messages: 1090
- Inscription: 17 Juin 2007
Justement, ce que je te donne permet de compléter ce que tu as déjà. J'avais bien compris ton problème....
Ce qui te manque, c'est de pouvoir boucler sur les sous répertoires, et c'est ce que j'ai expliqué.
Je vais produire les règles qu'il te faut quand j'aurai accès a mon environnement de test.
Ce qui te manque, c'est de pouvoir boucler sur les sous répertoires, et c'est ce que j'ai expliqué.
Je vais produire les règles qu'il te faut quand j'aurai accès a mon environnement de test.
- Vap
- WRInaute passionné

- Messages: 1090
- Inscription: 17 Juin 2007
Les règles suivantes ont l'air de faire ce que tu veux (testé en local):
Par exemple -http://localhost/module1/action1/par1-val1/par2-val2/par3-val3/ est récrit en -http://localhost/index.php?module=t&action=m&par3=val3
Si tu enlève le [R=301] de la deuxième règle, l'URL affichée dans le navigateur reste l'URL originale, mais le contenu est bien celui de l'URL après réécriture.
L'ordre des règles est important!
- Code: Tout sélectionner
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)/([^/]+)-([^/]+)/$ http://localhost/$1/?$2=$3&%1 [R=301]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ([^/])/([^/]) http://localhost/index.php?module=$1&action=$2&%1 [R=301]
Par exemple -http://localhost/module1/action1/par1-val1/par2-val2/par3-val3/ est récrit en -http://localhost/index.php?module=t&action=m&par3=val3
Si tu enlève le [R=301] de la deuxième règle, l'URL affichée dans le navigateur reste l'URL originale, mais le contenu est bien celui de l'URL après réécriture.
L'ordre des règles est important!
- Vap
- WRInaute passionné

- Messages: 1090
- Inscription: 17 Juin 2007
Oui, c'est bizarre. J'ai du me tromper en recopiant les règles.
Essaie ça (je ne suis pas devant mon PC de test):
Essaie ça (je ne suis pas devant mon PC de test):
- Code: Tout sélectionner
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)/([^/]+)-([^/]+)/$ http://localhost/$1/?$2=$3&%1 [R=301]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([^/]+)/([^/]+)/$ http://localhost/index.php?module=$1&action=$2&%1 [R=301]
- Vap
- WRInaute passionné

- Messages: 1090
- Inscription: 17 Juin 2007
Testé en local :
- Code: Tout sélectionner
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)/([^/]+)-([^/]+)/$ http://localhost/$1/?$2=$3&%1 [R=301]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ([^/]+)/([^/]+)/ http://localhost/index.php?module=$1&action=$2&%1 [R=301]
- HyWaN
- Nouveau WRInaute

- Messages: 14
- Inscription: 4 Juil 2005
Presque
.
Quand j'ai /AA/BB/, ça marche.
Quand j'ai /AA/BB/a-b/, a-b fonctionne, mais plus /AA/BB/.
Pareil pour /AA/BB/a-b/c-d/.
Je replace dans le contexte. Je l'utilise exactement à cet endroit : http://localhost/~user/Test/<index.php>
Donc dans le second cas (/AA/BB/a-b/), a-b est bien fonctionnel, mais AA est remplacé par localhost et BB par ~user
.
Voici ce que j'utilise :
Autre question, comment conserver l'URL telle qu'écrite ? C'est à dire, ne pas remplacer par la transformation.
Quand j'ai /AA/BB/, ça marche.
Quand j'ai /AA/BB/a-b/, a-b fonctionne, mais plus /AA/BB/.
Pareil pour /AA/BB/a-b/c-d/.
Je replace dans le contexte. Je l'utilise exactement à cet endroit : http://localhost/~user/Test/<index.php>
Donc dans le second cas (/AA/BB/a-b/), a-b est bien fonctionnel, mais AA est remplacé par localhost et BB par ~user
Voici ce que j'utilise :
- Code: Tout sélectionner
RewriteBase /~user/Test/
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)/([^/]+)-([^/]+)/$ http://localhost/~user/Test/$1/?$2=$3&%1 [R=301]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ([^/]+)/([^/]+)/ http://localhost/~user/Test/index.php?module=$1&action=$2&%1 [R=301]
Autre question, comment conserver l'URL telle qu'écrite ? C'est à dire, ne pas remplacer par la transformation.
- Vap
- WRInaute passionné

- Messages: 1090
- Inscription: 17 Juin 2007
Tu utilise un .htaccess ou tu met tes règles dans le httpd.conf?
Sinon, pour répondre à ta dernière question, enleve le [R=301] de la deuxième règle. Je pense que je l'avais dit plus haut.
Ce que je ferais: je mettrai le .htaccess que je t'ai donné dans le répertoire /~user/Test/ (avec RewriteBase /)
Sinon, pour répondre à ta dernière question, enleve le [R=301] de la deuxième règle. Je pense que je l'avais dit plus haut.
Ce que je ferais: je mettrai le .htaccess que je t'ai donné dans le répertoire /~user/Test/ (avec RewriteBase /)
- HyWaN
- Nouveau WRInaute

- Messages: 14
- Inscription: 4 Juil 2005
J'utilise un .htaccess.
Avec le changement du RewriteBase à la racine (/), même comportement.
Ne te tue pas à la tâche, je posais cette question par simple curiosité. Si ce n'est pas facilement faisable, cela ne sert à rien de persister (même si j'aimerais voir ce sujet résolu
).
Avec le changement du RewriteBase à la racine (/), même comportement.
Ne te tue pas à la tâche, je posais cette question par simple curiosité. Si ce n'est pas facilement faisable, cela ne sert à rien de persister (même si j'aimerais voir ce sujet résolu
12 messages
• Page 1 sur 1
Formation recommandée sur ce thème :
Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Sitemap partielle
- Disparition partielle
- indexation partielle
- Indexation partielle de site
- Désindexation partielle. Que faire ?
- google à vision partielle
- indexation partielle incomprehensible
- Référencer un site en construction partielle
- Exclusion partielle de l'index de Google
- Une sorte de sandbox partielle ?
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
