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 :

Rediriger tout sauf un type d'adresse


Sujet :

Apache

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut Rediriger tout sauf un type d'adresse
    Bonjour,

    Je cherche à rediriger toute adresse de subdomain.domain.com vers www.domaine.com, sauf si l'url est du type : subdomain.domain.com/any-page.htm

    J'ai pensé à utiliser en tête de liste un RewriteRule matchant les urls se terminant par .htm , en utilisant le flag L pour stopper le matching.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^subdomain.domain.com [NC]
    RewriteRule ^([^.]*).htm$ $1.htm [L]
    RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
    # rediriger domain.com vers www.domain.com
    RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
    RewriteRule ^(.*) http://www.domain.com/$1 [QSA,R=301,L]
    # règles du Zend Framework
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
    Mais ça ne fonctionne pas, FF me donne le message :
    Firefox a détecté que le serveur redirige la demande pour cette adresse d'une manière qui n'aboutira pas.
    Merci pour 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
    Les RewriteCond ne sont pas factorisables, il faut les répéter. Donc tes 3 premières lignes doivent devenir 4 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteCond %{HTTP_HOST} ^subdomain.domain.com [NC]
    RewriteRule ^([^.]*).htm$ $1.htm [L]
    RewriteCond %{HTTP_HOST} ^subdomain.domain.com [NC]
    RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
    Après, la seconde ligne peut être simplifiée comme suit, je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule \.htm$ - [L]

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Les RewriteCond ne sont pas factorisables, il faut les répéter. Donc tes 3 premières lignes doivent devenir 4 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteCond %{HTTP_HOST} ^subdomain.domain.com [NC]
    RewriteRule ^([^.]*).htm$ $1.htm [L]
    RewriteCond %{HTTP_HOST} ^subdomain.domain.com [NC]
    RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
    Après, la seconde ligne peut être simplifiée comme suit, je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule \.htm$ - [L]
    Hello, merci ça avance

    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
     
    RewriteEngine On
    # garder les adresses se terminant par .htm
    RewriteCond %{HTTP_HOST} ^subdomain.domain.com [NC]
    RewriteRule \.htm$ - [L]
    # rediriger tout le reste vers www
    RewriteCond %{HTTP_HOST} ^subdomain.domain.com [NC]
    RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
    # rediriger domain.com vers www.domain.com
    RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
    RewriteRule ^(.*) http://www.domain.com/$1 [QSA,R=301,L]
    # règles pour le Zend Framework
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
    Les liens quelconques sont bien redirigés vers www.domain.com/etc...

    Mais les adresses en .htm me donnent cette fois un 404 not found

    edit : je me dis que c'est la règle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RewriteRule ^.*$ index.php [NC,L]
    qui ne s'applique pas sur le sousdomaine, non ?

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu veux dire que ça donne une erreur 404 même pour une page HTML du soyus-domaine qui existe (http://subdomain.domain.com/pagequiexiste.htm) ? Si tu testes avec une URL quelconque qui n'existe pas, c'est normal d'avoir une erreur 404.

    Pour savoir si la règle que tu indiques est en cause, tu peux toujours faire un test en commentant la règle : comme c'est la dernière et qu'il n'y a pas de condition associée, tu verras tout de suite si c'est elle le problème. Mais je serai plutôt surpris car la condition sur le sous-domaine et le filtre en \.htm doit faire en sorte que ces URL en .htm ne passent jamais par les autres règles donc que la suite du fichier n'est jamais activé par ces URL en .htm sur le sous-domaine.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Tu veux dire que ça donne une erreur 404 même pour une page HTML du soyus-domaine qui existe (http://sousdomaine.domaine.com/pagequiexiste.htm) ? Si tu testes avec une URL quelconque qui n'existe pas, c'est normal d'avoir une erreur 404.

    Pour savoir si la règle que tu indiques est en cause, tu peux toujours faire un test en commentant la règle : comme c'est la dernière et qu'il n'y a pas de condition associée, tu verras tout de suite si c'est elle le problème. Mais je serai plutôt surpris car la condition sur le sous-domaine et le filtre en \.htm doit faire en sorte que ces URL en .htm ne passent jamais par les autres règles donc que la suite du fichier n'est jamais activé par ces URL en .htm sur le sous-domaine.
    Non, c'est pour une url .htm qui existe. Ca n'est que de la réecriture, ce qui est juste avant .htm est un paramètre à passer à un controleur.
    Je suis sous ZF donc logiquement tout doit arriver vers le point d'entrée index.php, peu importe le sous-domaine, via ces règles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    # règles pour le Zend Framework
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
    Et pour l'url du sous domaine en .htm, j'ai l'impression que ça n'est pas le cas. C'est pour ça que je me disais que ça pouvait provenir du fait que la règle qui redirige tout vers index.php se trouve tout en bas et n'est pas appliqué, puisque le flag [L] arrête tout une fois qu'un .htm est matché.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    J'ai essayé avec une condition supplémentaire, en REQUEST_URI

    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
     
    RewriteCond %{HTTP_HOST} ^sousdomaine\.domaine\.com [NC] #concerne le sous-domaine 
    RewriteCond %{REQUEST_URI} !^/(.*)\.htm$ #tout ce qui ne se termine pas par .htm
    RewriteRule ^/(.*) http://www.domaine.com/$1 [L,R] # on dirige le tout vers www.domaine.com/etc...
     
    # rediriger domaine.com vers www.domaine.com
    RewriteCond %{HTTP_HOST} ^domaine\.com$ [NC]
    RewriteRule ^(.*) http://www.domaine.com/$1 [QSA,R=301,L]
     
    # Redirection vers index.php sauf fichiers
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
    Pour moi ça a l'air bon, mais la redirection ne s'effectue pas.

    http://sousdomaine.domaine.com/une-requete.htm => ne redirige pas, parfait ça fonctionne.
    http://sousdomaine.domaine.com/foo/bar => ne redirige pas vers http://www.domaine.com/foo/bar

  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
    Est-ce que, quand tu demandes http://domain.com/toto, ton navigateur est redirigé sur http://www.domain.com/toto ? Les règles me semblent correctes aussi donc j'ai l'impression qu'il y a un problème avec HTTP_HOST qui ne vaut pas ce qu'on pense.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Est-ce que, quand tu demandes http://domain.com/toto, ton navigateur est redirigé sur http://www.domain.com/toto ? Les règles me semblent correctes aussi donc j'ai l'impression qu'il y a un problème avec HTTP_HOST qui ne vaut pas ce qu'on pense.
    Oui

    (somatoline cosmetic) ça fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RewriteCond %{REQUEST_URI} !^/(.*)\.htm$
    J'ai pensé que le (.*) était trop gourmand et englobait même le .htm, du coup j'ai essayé avec un ([-\w]*). mais même... le redirection aurait du fonctionner avec tout dans ce cas.

  9. #9
    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
    A tout hasard, tu as vidé le cache de ton navigateur avant de faire tes tests ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    A tout hasard, tu as vidé le cache de ton navigateur avant de faire tes tests ?
    J'utilise le web developer tool pour FF avec la desactivation du cache. Ca suffit ?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Bon en fait, il semble que les conditions et la règle ne soient même pas matchées.
    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RewriteCond %{HTTP_HOST} ^sousdomaine\.domaine\.com [NC]
    RewriteRule ^/(.*) http://www.google.com/?q=$1 [L,R]
    pour le fun. Et aucune adresse n'est redirigée vers google. On dirait que la condition HTTP_HOST ne passe vraiment pas

  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
    Ca y est, j'ai vu le problème : retire le / dans le premier membre du RewriteRule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(.*) http://www.domaine.com/$1 [L,R]

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Ca y est, j'ai vu le problème : retire le / dans le premier membre du RewriteRule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(.*) http://www.domaine.com/$1 [L,R]
    Effectivement, le redirection marchent maintenant

    Il reste juste un truc : les .htm sont aussi redirigés.

    d'ailleurs c'est bizarre, car, toujours pour le fun :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RewriteCond %{HTTP_HOST} ^sousdomaine.domaine.com$ [NC]
    RewriteCond %{REQUEST_URI} !^(.*)\.htm$
    RewriteRule ^(.*) http://www.google.com/?q=$1 [L,R]
    Je me retrouve sur google avec le requete : index.php, donc $1 vaut index.php.
    En fait, on dirait que le REQUEST_URI ne passe pas.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Ok, après avoir fait un dump sur mon serveur de $_SERVER['REQUEST_URI'], je vois qu'il commence par un "/", je le rajoute donc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RewriteCond %{REQUEST_URI} !^/(.*)\.htm$
    La correction est juste, mais ça ne fonctionne toujours pas
    Pour tester, si j'enleve le "!" et que je saisis une adresse en dur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RewriteCond %{REQUEST_URI} ^toto\.htm$
    http://sousdomaine.domaine.com/toto.htm est bien redirigé, et c'est le seul.

    Le "!" d'interdiction a l'air de poser problème

  15. #15
    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 redonner ton .htaccess complet ?

    Ajouter un / dans ton filtre de RewriteCond sur %{REQUEST_URI} ne change strictement rien car ce / est pris dans le (.*) qui suit. Tu peux même réduire le filtre à "tout ce qui ne se termine pas par .htm" comme ceci, le filtre sera équivalent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_URI} !\.htm$
    Que se passe-t-il si tu retires le $ sur le premier test sur HTTP_HOST ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{HTTP_HOST} ^sousdomaine\.domaine\.com [NC]

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Tu peux redonner ton .htaccess complet ?

    Ajouter un / dans ton filtre de RewriteCond sur %{REQUEST_URI} ne change strictement rien car ce / est pris dans le (.*) qui suit. Tu peux même réduire le filtre à "tout ce qui ne se termine pas par .htm" comme ceci, le filtre sera équivalent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_URI} !\.htm$
    Que se passe-t-il si tu retires le $ sur le premier test sur HTTP_HOST ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{HTTP_HOST} ^sousdomaine\.domaine\.com [NC]
    Pour l'ajout de "/" , je me disais simplement qu'il y avait l'opérateur "^" de début de chaine avant le "([-\w]*)", donc pour que la condition passe, il fallait que l'uri commence par une lettre un chiffre ou un tiret. Ce qui n'était pas le cas, puisque mon uri commence toujours par un "/". Je suis à coté de la plaque au niveau du fonctionnement du filtre dans le RewriteCond ?

    Voici la totalité de mon .htaccess
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^sousdomaine.domaine.com [NC]
    RewriteCond %{REQUEST_URI} !\.htm$
    RewriteRule ^(.*) http://www.google.com/?q=$1 [L,R]
    # rediriger domaine.com vers www.domaine.com
    RewriteCond %{HTTP_HOST} ^domaine\.com$ [NC]
    RewriteRule ^(.*) http://www.domaine.com/$1 [QSA,R=301,L]
    # Redirection Zend Framework
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
    Si je retire le $ de fin de chaine dans le 1er HTTP_POST, ça ne prend pas non plus, tout est redirigé.
    Ce qui m'étonne, mais c'est peut être qu'un détail, c'est que les adresses en .htm, je me retrouve après la redirection avec $1 = index.php

  17. #17
    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
    Je vais encore jouer au mec chiant, je ne trouve pas tes explications très claires

    Citation Envoyé par supertino7 Voir le message
    Si je retire le $ de fin de chaine dans le 1er HTTP_POST, ça ne prend pas non plus, tout est redirigé.
    Est-ce que tu peux lister les différentes URL absolues (http://...) que tu utilises pour tester, le résultat attendu et le résultat obtenu. Je suis un peu comme toi, je ne vois pas ce qui cloche.

    Au passage, essaie d'ajouter ceci tout en haut de ton .htaccess :

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Je vais encore jouer au mec chiant, je ne trouve pas tes explications très claires


    Est-ce que tu peux lister les différentes URL absolues (http://...) que tu utilises pour tester, le résultat attendu et le résultat obtenu. Je suis un peu comme toi, je ne vois pas ce qui cloche.

    Au passage, essaie d'ajouter ceci tout en haut de ton .htaccess :
    Non c'est ma faute, je suis pas super compréhensible comme type

    Donc je teste :

    http://sousdomaine.domaine.com/toto.htm
    resultat attendu : pas de redirection (c'est un .htm sur le sous-domaine, la seule url valable. )
    résultat obtenu : redirection vers http://www.google.com/?q=index.php

    http://sousdomaine.domaine.com/toto/popo
    resultat attendu : redirection vers http://www.domaine.com/toto/popo
    resultat obtenu : redirection vers http://www.google.com/?q=toto/popo

    vala.
    Au passage merci bcp pour ton aide.

    edit : pas de changement avec l'option multiviews.

  19. #19
    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
    Bon sûr, mais c'est bien sang !!! C'est parfaitement logique, comme comportement : la règle marche parfaitement : le .htm n'est pas réécrit vers Google dans un premier temps : regarde la valeur du paramètre q : c'est index.php. Ce index.php vient de la dernière règle qui n'a pas de condition ! C'est bien ce que tu avais diagnostiqué. Et comme mod_rewrite ne s'arrête de travailler que s'il aboutit à une URL qui n'est plus modifiable, il refait passer index.php à travers toutes les règles. Et pour le coup, au tour suivant, la condition !\.htm^ est vérifiée, et tu tombes sur Google. Ce qu'on peut faire pour corriger le truc, c'est ajouter une condition pour ne pas rediriger quand c'est index.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^sousdomaine.domaine.com [NC]
    RewriteCond %{REQUEST_URI} !\.htm$
    RewriteCond %{REQUEST_URI} !/index\.php$
    RewriteRule ^(.*) http://www.google.com/?q=$1 [L,R]
    Pour la seconde URL de test que tu donnes, c'est plus immédiat que ça car c'est exactement ce que dis ta règle : domaine "sousdomaine.domaine.com" et ne se finissant pas par .htm. Pour le coup, ton .htaccess ne dit pas quoi faire dans ce cas, donc le comportement ne m'étonne pas

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Bon sûr, mais c'est bien sang !!! C'est parfaitement logique, comme comportement : la règle marche parfaitement : le .htm n'est pas réécrit vers Google dans un premier temps : regarde la valeur du paramètre q : c'est index.php. Ce index.php vient de la dernière règle qui n'a pas de condition ! C'est bien ce que tu avais diagnostiqué. Et comme mod_rewrite ne s'arrête de travailler que s'il aboutit à une URL qui n'est plus modifiable, il refait passer index.php à travers toutes les règles. Et pour le coup, au tour suivant, la condition !\.htm^ est vérifiée, et tu tombes sur Google. Ce qu'on peut faire pour corriger le truc, c'est ajouter une condition pour ne pas rediriger quand c'est index.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^sousdomaine.domaine.com [NC]
    RewriteCond %{REQUEST_URI} !\.htm$
    RewriteCond %{REQUEST_URI} !/index\.php$
    RewriteRule ^(.*) http://www.google.com/?q=$1 [L,R]
    Pour la seconde URL de test que tu donnes, c'est plus immédiat que ça car c'est exactement ce que dis ta règle : domaine "sousdomaine.domaine.com" et ne se finissant pas par .htm. Pour le coup, ton .htaccess ne dit pas quoi faire dans ce cas, donc le comportement ne m'étonne pas
    Je suis bête, la 2nd URL fonctionnait en fait, j'ai juste occulté (ou omis de préciser ) que j'avais laissé l'url de redirection vers google.

    Bon par contre, le comportement du mod_rewrite m'a l'air encore flou .
    Si je comprends ton explication :

    Mon lien est un sousdomaine en .htm
    - Il ne passe pas la redirection google qui précise "pas de .htm"
    - Il ne passe pas la redirection vers www.domaine.com qui précise uniquement les domaine.com
    - Il est soumis la redirection ^.* vers index.php

    et la boucle recommence avec index.php ?
    Le flag L ne permet pas de stopper net le matching ?

    edit : ok , j'ai enfin trouvé la doc officielle et en français
    http://httpd.apache.org/docs/2.3/fr/...ml#rewritecond
    http://httpd.apache.org/docs/trunk/f...ite/flags.html

    Je comprends mieux. Le flag L arrête certes le matching, mais la nouvelle url est forcément resoumise à la totalité des règles.
    En fait j'ai du mal à différencier redirection et réecriture.
    La dernière directive permet de diriger toutes les requêtes finales vers index.php, mais pour autant "index.php" n'apparait pas dans l'url, et c'est ça qui a tendance à me tromper.

    En fait, un lien "/popo" peut être réecrit une dizaine de fois sans jamais changer d'apparence ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/05/2012, 22h52
  2. Réponses: 7
    Dernier message: 27/04/2012, 15h29
  3. SELECT "tout sauf champs xx, yy..."
    Par _marabout dans le forum Requêtes
    Réponses: 7
    Dernier message: 21/01/2008, 17h42
  4. Réponses: 2
    Dernier message: 30/03/2007, 15h15
  5. Difference entre types d'Adresse IP
    Par freud dans le forum Développement
    Réponses: 3
    Dernier message: 02/03/2003, 02h06

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