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

Vue hybride

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    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
    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 confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    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
    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 confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    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 confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    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

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

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