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 :

[.htaccess] Redirection en boucle


Sujet :

Apache

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut [.htaccess] Redirection en boucle
    Bonjour a tous et a toutes.

    j'ai un fichier htaccess avec 4 règles mais qui ne fonctionnent pas bien ensemble
    le navigateur me dit qu'il y a trop de redirections, et je ne vois vraiment pas comment resoudre ce problème!

    voici les règles que j'ai définies:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ## forcer un slash a la fin des url
    RewriteCond %{REQUEST_URI} /+[^\.]+$
    RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [L,R=301]
     
     
    ## toujours rediriger index.php vers /
    RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ (/.*)?/index.(htm|html|php)
    RewriteRule ^(.*)index.(htm|html|php)$ /$1 [R=301,L]
     
     
     
    ## le francais par défaut
    #RewriteRule !^[a-z]{2}/ /fr%{REQUEST_URI} [L,R=301,QSA]
     
     
    ## gestion des dossiers de langues
    RewriteRule ^([a-z]{2})/(.*)$ /$2?lang=$1 [QSA,L]
    c'est les 2 dernière lignes qui causent le dysfonctionnement!

    MErci de votre aide

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    Avec toutes les URL ou une URL en particulier ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    Avec toutes les url !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Bonsoir,

    j'ai aussi essayé avec ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{REQUEST_URI} !^/(en|fr)/
    RewriteRule ^(.*)$ /fr/$1 [L,R=301]
    mais rien a faire! toujours trop de redirection. les 2 derniere reglent ne s'entendent vraiment pas!!

    comment est ce que tu aurais fait pour a la fois gerer les dossiers de langue et toujours avoir le /fr/ par defaut??

    Merci par avance

  5. #5
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu as vidé le cache de ton navigateur avant de tester les 2 lignes que tu donnes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{REQUEST_URI} !^/(en|fr)/
    RewriteRule ^(.*)$ /fr/$1 [L,R=301]
    Cette configuration me semble correcte.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    MErci pour ta réponse.

    Oui, j'ai bien vidé le cache!

    au fait si je mets cette ligne toute seule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule !^[a-z]{2}/ /fr%{REQUEST_URI} [L,R=301]
    ca marche bien, je suis toujours redirigé vers /fr/ par défaut, mais j'ai une erreur 404 ce qui est normal

    par contre si je mets ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RewriteRule !^[a-z]{2}/ /fr%{REQUEST_URI} [L,R=301]
     
    RewriteRule ^([a-z]{2})/(.*)$ /$2?lang=$1 [QSA,L]
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    RewriteCond %{REQUEST_URI} !^/(en|fr)/
    RewriteRule ^(.*)$ /fr/$1 [L,R=301]
     
    RewriteRule ^([a-z]{2})/(.*)$ /$2?lang=$1 [QSA,L]
    j'obiens ce genre d'url:
    http://monsite.localhost/fr/?lang=fr...ang=fr&lang=fr

    Je ne sais plus quoi faire

  7. #7
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Ah oui, j'ai compris !! Ajoute la condition suivante à la première règle de ton dernier exemple de configuration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{QUERY_STRING} !lang=

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Tu continueras toujours a me surprendre Merci, ca marche bien

    Mais c'est quand meme bizarre qu'on soit obligé de bidouiller pour que ça fonctionne correctement!!

    comment est ce que tu aurais fait toi pour arriver au resultat que je cherche, mais de maniere plus propre?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Aye, j'ai crié victoire trop vite, mes scripts php appelés avec Ajax ne s'executent pas et je ne vois vraiment pas pour quelle raison!!

  10. #10
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Cette manière de faire est propre : la boucle infinie est on ne peut plus normal car, contrairement à ce qu'on croit avec le flag L, Apache exécute les règles plusieurs fois jusqu'à aboutir à une URL qui n'est plus réécrite. Le flag L arrête le cycle de réécriture courant mais pas toute la réécriture. Seul le flag R arrête définitivement la réécriture.

    Pour Ajax, c'est possible qu'il n'aime pas la redirection vers /fr/... Il faut que tu obtiennes les traces des requêtes HTTP avant configuration (quand Ajax marche) et après configuration (quand ça ne marche plus) pour identifier la requête HTTP qui ne marche plus. Quand tu l'auras, donne-la nous, on verra ce qu'on peut faire.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Bonjour _MAC_ et encore une fois merci de ton aide.

    j'ai regardé les requetes http générées par l'appel ajax.
    J'ai remarque que lorsque ça marche pas, le script ajax est bien exécuté mais les données POST ne sont pas envoyées.
    il utilise le chemin "/fr/inc/ajax/search.php"

    et quand ca marche, les données du formulaire sont bien envoyées et le script est appele avec le chemin "/inc/ajax/send-search.php".

    Dans les 2 cas de figures, les scripts ajax sont toujours appelés depuis la page site.com/fr/

  12. #12
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu peux nous envoyer la trace complète lorsque le POST ne marche pas ? S'il y a un POST précédent qui reçoit en réponse une redirection 301 ou 302, c'est logique quelque part que le corps de la requête POST disparaisse car la spec HTTP ne précise pas le comportement des navigateurs lorsqu'ils reçoivent une redirection sur un POST. Pour des raisons de sécurité (genre attaque "man in the middle" pour détournement des requêtes POST), il se peut que le navigateur ne propage pas les paramètres. Et dans ce cas-là, la seule solution c'est de faire en sorte que le code Ajax fasse son POST directement sur la bonne URL.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Je ne sais pas comment envoyé la trace complete du POST, je ne l'ai jamais fait

    une petite précision: l'appel du fichier ajax se fait toujours de la meme url: /inc/ajax/fichier.php, je n'inclus jamais les langues dans le chemin!

  14. #14
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par redah75 Voir le message
    Je ne sais pas comment envoyé la trace complete du POST, je ne l'ai jamais fait
    Citation Envoyé par redah75 Voir le message
    j'ai regardé les requetes http générées par l'appel ajax.
    Regarder : tu as bien utilisé un outil pour faire ça => copier + coller dans le forum !


    Citation Envoyé par redah75 Voir le message
    une petite précision: l'appel du fichier ajax se fait toujours de la meme url: /inc/ajax/fichier.php, je n'inclus jamais les langues dans le chemin!
    Ca semble conforter mon hypothèse de la redirection sur un POST initial. Il y a un truc qu'on peut faire : c'est dire à Apache de ne pas faire de redirection si on demande ajax. Il suffit d'ajouter la condition suivante à ta redirection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_URI} !^/inc/ajax/

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Regarder : tu as bien utilisé un outil pour faire ça => copier + coller dans le forum !
    d'accord mais je ne sais pas si ca va etre vraiment lisible!

    ta solution de rajouter une autre regle fonctionne bien, mais le problème c'est que j'ai plein d'appels de fichier par ajax mais dans des emplacements differents ca serait un peu dommage de creer une regle par dossier!!

    ca c'est quand ca marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    text/html
    Resource Type	XHR
    Location
    Full URL	http://site.localhost/inc/ajax/send-search.php
    Scheme	http
    Host	site.localhost
    Path	/inc/ajax/send-search.php
    Filename	send-search.php
    Request & Response
    Method	POST
    Cached	No
    Status	OK
    Code	200
    
    Post Data
    Name
    token
    b22b6dbd215544b8a850ae45a34c9a16eaf9a53e8120105d40169df3c1af697d
    form
    Buyer
    ......
    
    Request Headers
    Name
    Value
    Origin
    http://site.localhost
    X-Requested-With
    XMLHttpRequest
    User-Agent
    Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.28.10 (KHTML, like Gecko) Version/6.0.3 Safari/536.28.10
    Content-Type
    application/x-www-form-urlencoded
    Accept
    */*
    Referer
    http://site.localhost/fr/
    Response Headers
    Name
    Value
    Date
    Tue, 26 Mar 2013 21:10:41 GMT
    X-Powered-By
    PHP/5.3.15
    Connection
    Keep-Alive
    Content-Length
    176
    Pragma
    no-cache
    Server
    Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch mod_ssl/2.2.22 OpenSSL/0.9.8r
    Content-Type
    text/html
    Cache-Control
    no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Keep-Alive
    timeout=5, max=100
    Expires
    Thu, 19 Nov 1981 08:52:00 GMT
    et quand ça marceh pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    text/html
    Resource Type	XHR
    Location
    Full URL	http://site.localhost/fr/inc/ajax/send-search.php
    Scheme	http
    Host	site.localhost
    Path	/fr/inc/ajax/send-search.php
    Filename	send-search.php
    Request & Response
    Method	POST
    Cached	No
    Status	OK
    Code	200
    
    Post Data
    Nam
    token
    b22b6dbd215544b8a850ae45a34c9a16eaf9a53e8120105d40169df3c1af697d
    form
    Buyer
    ....
    
    Request Headers
    Name
    Value
    Origin
    http://site.localhost
    Accept-Encoding
    gzip, deflate
    Accept-Language
    en-us
    X-Requested-With
    XMLHttpRequest
    User-Agent
    Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.28.10 (KHTML, like Gecko) Version/6.0.3 Safari/536.28.10
    Accept
    */*
    Referer
    http://site.localhost/fr/
    Response Headers
    Name
    Value
    Date
    Tue, 26 Mar 2013 21:17:08 GMT
    X-Powered-By
    PHP/5.3.15
    Connection
    Keep-Alive
    Content-Length
    24
    Pragma
    no-cache
    Server
    Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch mod_ssl/2.2.22 OpenSSL/0.9.8r
    Content-Type
    text/html
    Cache-Control
    no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Keep-Alive
    timeout=5, max=99
    Expires
    Thu, 19 Nov 1981 08:52:00 GMT

  16. #16
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Par exemple, si le mot-clé "/ajax/" figure toujours dans les URL Ajax, c'est très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_URI} !/ajax/
    Sinon, effectivement, il faut créer une condition par URL ou par groupe d'URL, un groupe étant reconnaissable par un pattern commun comme dans mon exemple ci-dessus (le pattern est "/ajax/").

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Genial, ca marche bien, mille mercis
    effectivement, tous mes appels ajax se font d'un dossier "ajax"...

    MErci encore une fois.

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

Discussions similaires

  1. [Apache][.htaccess] Redirection de sous domaines
    Par dorian53 dans le forum Apache
    Réponses: 2
    Dernier message: 28/11/2015, 23h20
  2. [.htaccess] Redirection d'image et boucle infinie
    Par a___k dans le forum Apache
    Réponses: 3
    Dernier message: 17/11/2010, 15h48
  3. [.htaccess] Redirection qui part en boucle infinie
    Par lavoiekeven dans le forum Apache
    Réponses: 1
    Dernier message: 31/10/2009, 14h40
  4. [Htaccess] Redirection htaccess 404
    Par shadeoner dans le forum Apache
    Réponses: 1
    Dernier message: 27/03/2007, 10h39
  5. [Htaccess] redirection avec .htaccess
    Par kimo0147 dans le forum Apache
    Réponses: 1
    Dernier message: 14/03/2007, 10h16

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