[Résolu] RewriteRule et URL dynamique

Nouveau WRInaute
Bonjour,
Voici un extrait de mon htaccess
Code:
RewriteEngine On
RewriteBase /professionnel/
ErrorDocument 401 /401.html
# ErrorDocument 404 /professionnel/non-trouve.html
ErrorDocument 404 http://www.monsite.com/professionnel/advanced_search.php

# permet d être sûr que les clients ont les modifs de css
RewriteRule ^templates/Original/stylesheet.[0-9]+.css /professionnel/templates/Original/stylesheet.css [L]
RewriteRule ^templates/Original/menu.[0-9]+.css /professionnel/templates/Original/menu.css [L]

# redirection modif marque
RewriteCond %{QUERY_STRING} ^manufacturers_id=10$
RewriteRule ^product_info\.php?manufacturers_id=10(.*)$ /professionnel/product_info.php?manufacturers_id=26$1 [L]

Ma redirection de marque (la dernière) ne semble pas fonctionner.
Je souhaite rediriger :
/professionnel/product_info.php?manufacturers_id=10&products_id=2995
Vers :
/professionnel/product_info.php?manufacturers_id=26&products_id=2995
Quelqu'un aurait-il une piste ?
Cordialement
 
WRInaute impliqué
Re: RewriteRule et URL dynamique

Les query string ne doivent pas apparaitre dans le RewriteRule.

Code:
    # redirection modif marque
    RewriteCond %{QUERY_STRING} ^manufacturers_id=10$
    RewriteRule ^product_info\.php$ /professionnel/product_info.php?manufacturers_id=26 [QSA,L]

QSA permet de faire passer les paramètres URL (au lieu de ton $1).
À voir si ton "manufacturers_id=10" ne passe pas quand même.
 
Nouveau WRInaute
Re: RewriteRule et URL dynamique

Merci Blont,
Cela ne semble pas fonctionner

Quand doit-on mettre product_info\.php à la place de product_info.php ?
Code:
    # redirection modif marque
    RewriteCond %{QUERY_STRING} ^manufacturers_id=10$
    RewriteRule ^product_info\.php$ /professionnel/product_info.php?manufacturers_id=26 [QSA,L]
J'ai essayer avec et sans \, j'ai le même résultat (pas de redirection)

J'ai essayer sans RewriteCond
Code:
 RewriteRule ^product_info\.php?manufacturers_id=10(.*)$ /professionnel/product_info.php?manufacturers_id=26$1 [L]
Pas mieux

Voici une redirection qui fonctionne si cela peut orienter.
Code:
# redirection modif menu 2010
RewriteCond %{QUERY_STRING} ^cPath=192_195$
RewriteRule ^index\.php$ /professionnel/index\.php?cPath=444_509 [R=301,L]
 
WRInaute passionné
Re: RewriteRule et URL dynamique

si tu as plusieurs paramètres c'est plutôt :
Code:
RewriteCond %{QUERY_STRING} ^(.*&)?manufacturers_id=10(&.*)?$
RewriteRule ^product_info\.php$ /professionnel/product_info.php?%1manufacturers_id=26%2 [L]
 
Nouveau WRInaute
Re: RewriteRule et URL dynamique

Super forty cela fonctionne.

Par contre j'ai besoin d'une explication de texte :
Code:
RewriteCond %{QUERY_STRING} ^(.*&)?manufacturers_id=10(&.*)?$
RewriteRule ^product_info\.php$ /professionnel/product_info.php?%1manufacturers_id=26%2 [L]

(.*&)
(&.*) C'est pour remplacer tous les paramètres ? Pourquoi ils ne sont pas écrit dans le même sens ?

%1
%2 C'est pour rapeller ces paramètres ?

Si je comprend bien c'est équivalent à (.*) et $1 et $2 ?

Merci :D
 
WRInaute passionné
Re: RewriteRule et URL dynamique

"." veut dire n'importe quel caractère
"*" veut dire que ce qui précède peut-être répété de 0 à l'infini
"&" veut dire "&"
les parenthèses c'est pour mémoriser
"?" c'est pour dire que ce qui précède est facultatif
=> ca permet de mémoriser d'éventuels paramètres avant manufacturers_id (même principe pour les paramètres après)

%1 correspond à la première valeur mémorisée dans un RewriteCond entre () et %2 la deuxième
 
Nouveau WRInaute
Re: RewriteRule et URL dynamique

J'ai presque tout compris

sauf pour le & pourquoi est-il nécessaire?
(.*) ne suffirait-il pas ?

Merci
 
WRInaute passionné
Re: RewriteRule et URL dynamique

"&" étant le séparateur de paramètres dans une url, c'est plus propre de le mettre. Sinon si tu as une url de ce type ca sera aussi redirigé : /professionnel/product_info.php?toto=123&autre_manufacturers_id=10&products_id=2995
 
Discussions similaires
Haut