IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Redirection permanente & répertoire virtuel


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 215
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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]

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 215
    Par défaut
    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

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    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}.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 215
    Par défaut
    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

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Bizarrement, c'est toujours la doc 2.0 qui remonte dans les recherches Google, je ne sais pas pourquoi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/08/2012, 22h39
  2. [URL rewriting] Redirection d'un répertoire virtuel
    Par frakosun dans le forum Apache
    Réponses: 2
    Dernier message: 25/02/2010, 18h59
  3. Réponses: 3
    Dernier message: 07/12/2006, 11h15
  4. créer un répertoire virtuel
    Par flo456 dans le forum IIS
    Réponses: 3
    Dernier message: 18/10/2006, 18h40
  5. [webapp][struts] Répertoires virtuels dans l'URL
    Par Loicb dans le forum Struts 1
    Réponses: 2
    Dernier message: 20/02/2006, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo