Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/11/2011, 21h55   #1
Membre habitué
 
Inscription : décembre 2008
Messages : 207
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 207
Points : 121
Points : 121
Par défaut Redirection permanente & répertoire virtuel

Bonjour,

Suite à l'apparition d'une nouvelle version du site, nous devons rediriger les pages rien de surprenant je vous l'accorde.

Le nouveau site a une url composée de la locale "fr" + l'url , soit :

www.monsite.com/fr/monurl

Tout ceci étant redirigé de façon transparente vers www.monsite.com/index.php , qui à partir de la prend le relai pour analyser l'url et dispatcher tout ça.

J'ai essayé la règle suivante :

Code :
RewriteRule ^index\.php\?c=ws&a=widget&id=([0-9]+)&sansliens=1&type=widget$ fr/index.php?c=widget&a=old_widget1&product_id=$1&nolink=1 [R=301,L]
Qui ne fonctionne pas. J'ai vérifié ma regex avec preg_match() de PHP, et l'url :

index.php?c=ws&a=widget&id=1295&sansliens=1&type=widget match bel et bien le pattern donné dans la réécriture.

Donc le problème vient à mon avis du répertoire virtuel /fr/ , et du fait que le fichier /index.php existe déjà !

J'ai d'autres redirections, comme par exemple :

Code :
RewriteRule ^avis-client(-(.*))?(-([a-z0-9]+)\.html)$  fr/$4/avis-client-$2.html [R=301,L]
Et celle-ci fonctionne. C'est donc qu'il s'agit bien d'une histoire de fichiers existants déjà & de répertoire virtuels. Malheureusement mon analyse s'arrête la, même si je -crois- comprendre où est le problème, je suis incapable de le résoudre. Quelqu'un pourrait-il m'aider ?
Feng-Huang est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 21h05   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 295
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 295
Points : 8 575
Points : 8 575
Pas du tout, c'est une histoire que RewriteRule ne travaille que sur le chemin des URL, pas la query string. Pour travailler sur la query string, il faut utiliser RewriteCond :
Code :
1
2
RewriteCond %{QUERY_STRING} ^c=ws&a=widget&id=([0-9]+)&sansliens=1&type=widget$
RewriteRule ^index\.php$ fr/index.php?c=widget&a=old_widget1&product_id=%1&nolink=1 [R=301,L]
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 21h53   #3
Membre habitué
 
Inscription : décembre 2008
Messages : 207
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 207
Points : 121
Points : 121
Wow, merci !

Je suis assez scotché car même le manuel de apache lui-même ne le dit pas (de façon explicite en tout cas).

Encore merci
Feng-Huang est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 14/11/2011, 15h09   #4
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 295
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 295
Points : 8 575
Points : 8 575
Si si, il le dit très bien :
Citation:
Envoyé par Manuel Apache
Qu'est-ce qui est comparé ?

Dans un contexte de serveur virtuel VirtualHost, le modèle est tout d'abord comparé à la portion de l'URL située entre le nom d'hôte éventuellement accompagné du port, et la chaîne de paramètres (par exemple "/app1/index.html").

Dans les contextes de répertoire Directory et htaccess, le modèle est tout d'abord comparé au chemin du système de fichiers, après suppression du préfixe ou chemin de base ayant conduit à la règle RewriteRule (par exemple "app1/index.html" ou "index.html" selon l'endroit où les directives sont définies).

Si vous voulez effectuer une comparaison en tenant compte du nom d'hôte, du port ou de la chaîne de paramètres, utilisez une directive RewriteCond comportant les variables %{HTTP_HOST}, %{SERVER_PORT}, ou %{QUERY_STRING}.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 15h32   #5
Membre habitué
 
Inscription : décembre 2008
Messages : 207
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 207
Points : 121
Points : 121
Google : apache url rewriting => http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

J'aurais du me méfier du numéro de version
Feng-Huang est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 20h41   #6
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 295
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 295
Points : 8 575
Points : 8 575
Bizarrement, c'est toujours la doc 2.0 qui remonte dans les recherches Google, je ne sais pas pourquoi
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h52.


 
 
 
 
Partenaires

Hébergement Web