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 301, puis redirection interne


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut [.htaccess] Redirection 301, puis redirection interne
    Bonjour,

    Je voudrai retirer les index.php de mes pages qui se présente sous la forme suivante :
    www.mon-site.com/index.php/mapage
    Pour obtenir la forme suivante :
    www.mon-site.com/mapage

    L'utilisateur tape => www.mon-site.com/index.php/mapage
    Je le redirige dans un première temps vers => www.mon-site.com/mapage
    La page n'a pas d'index, alors je fait une redirection interne vers la bonne page => www.mon-site.com/index.php/mapage
    J'ai donc subdiviser mon problème en deux étapes :
    1. Faire une redirection permanente de l'index.php vers la page sans index.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^index\.php(.*)$ $1 [R=301,L]
    2. Faire une redirection interne de la page sans index.php vers la page avec l'index
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(.*) index\.php/$1 [L,QSA]
    Mon problème est que je n'arrive pas à faire cohabité les deux expressions.

    J'ai beau retourner le problème dans tout les sens je n'arrive pas à voir l'erreur.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  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
    Il faut ajouter une information pour identifier les accès à index.php depuis une réécriture interne d'un accès externe (directement depuis un navigateur) de manière à dire que la redirection du navigateur ne se fasse que dans le cas d'un accès à index.php depuis l'extérieur. Cela peut passer par une variable d'environnement ou un paramètre d'URL fictif.

    Pour illustrer, voici une version avec un paramètre d'URL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteCond %{QUERY_STRING} !redirect_internal=true
    RewriteRule ^index\.php(.*)$ $1 [R=301,L]
     
    RewriteRule ^(.*) index\.php/$1?redirect_internal=true [L,QSA]
    J'ai un doute sur la dernière règle : toute seule, sans RewriteCond qui la précède, elle déclenche une boucle infinie, j'ai l'impression.

  3. #3
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Merci beaucoup !

    La piste (c'est une autoroute à ce niveau) que tu donne m'a permis de trouver la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    # On active la réécriture d'URL
    RewriteEngine on
     
    #Si on a un index.php et qu'on n'est pas en redirection interne, on le supprime
    RewriteCond %{QUERY_STRING} !^redirect_internal=true$
    RewriteRule ^index\.php/(.*)$ /$1 [R=301,L]
     
    #Si on n'a pas encore fait la redirection interne, on l'a fait !
    RewriteCond %{QUERY_STRING} !^redirect_internal=true$
    RewriteRule ^(.*)$ /index.php/$1?redirect_internal=true [L]
    Je dois encore tester sur mon projet si les redirections réaliser avant ne perturbe pas le processus. Mais je pense que le problème est résolu.

    Merci encore !

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Je reviens sur le problème avec une mauvaise nouvelle pour moi.
    L'ajout du paramètre dans l'URL provoque des erreurs de gestion au niveau du Framework utiliser pour mon projet.
    il faudrait donc que je trouve une autre solution pour identifier la redirection interne et éviter la récursion.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  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
    Par défaut
    Dans ce cas, faut essayer les variables d'environnement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # On active la réécriture d'URL
    RewriteEngine on
     
    #Si on a un index.php et qu'on n'est pas en redirection interne, on le supprime
    RewriteCond %{ENV:redirect_internal} !^true$
    RewriteRule ^index\.php/(.*)$ /$1 [R=301,L]
     
    #Si on n'a pas encore fait la redirection interne, on l'a fait !
    RewriteCond %{ENV:redirect_internal} !^true$
    RewriteRule ^(.*)$ /index.php/$1 [E=redirect_internal:true,L]

  6. #6
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Mon accès à la variable d'environnement ne fonctionne pas...

    Si je réalise ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteEngine on
    setenv REDIRECT_INTERNAL true
    RewriteCond %{ENV:REDIRECT_INTERNAL} !^true$
    RewriteCond %{QUERY_STRING} !^redirect_internal=true$
    RewriteRule ^(.*)$ /index.php/$1?redirect_internal=true [R=302,L]
    Ma règle s'applique, alors que je viens de setter à "true" la variable.
    Mais j'arrive à céder à la variable via php en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $_SERVER["REDIRECT_INTERNAL"];
    Par contre si je réalise ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteEngine on
    RewriteCond %{ENV:REDIRECT_INTERNAL} !^true$
    RewriteCond %{QUERY_STRING} !^redirect_internal=true$
    RewriteRule ^(.*)$ /index.php/$1?redirect_internal=true [R=302,E=REDIRECT_INTERNAL:true,L]
    La variable d'environnement n'est même pas accessible via php...

    Je n'arrive donc pas à crée ma variable correctement et encore moins à la lire.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  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
    Par défaut
    Bon, c'est pas glorieux, ça marche pas, mon truc avec les variables d'environnement. En fait, d'un cycle de réécriture à un autre, mod_rewrite "oublie" les variables d'environnement qu'il a précédemment positionné. Je ne sais pas pourquoi. Du coup, lorsqu'Apache repasse une seconde fois les règles, les conditions basées sur la variable d'environnement ne sont pas vérifiées. Donc ça marche pas

    Je n'ai pas trouvé le moyen de contourner ce problème. Du coup, je pense que la seule vraie piste est le paramètre d'URL.

    Citation Envoyé par kolodz Voir le message
    L'ajout du paramètre dans l'URL provoque des erreurs de gestion au niveau du Framework utiliser pour mon projet.
    Quel est ce problème ? Je ne vois pas pourquoi ajouter un paramètre à une URL ferait planter un framework

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

Discussions similaires

  1. Redirection 301 en .htaccess
    Par lelectronique.com dans le forum Apache
    Réponses: 8
    Dernier message: 17/01/2013, 07h58
  2. [.htaccess] Redirection 301, framework cakephp
    Par Blinkers dans le forum Apache
    Réponses: 3
    Dernier message: 19/03/2012, 10h54
  3. htaccess et redirection 301
    Par petitours dans le forum Langages serveur
    Réponses: 0
    Dernier message: 14/04/2011, 20h28
  4. redirection 301 (htaccess)
    Par DevStage dans le forum Autres langages pour le Web
    Réponses: 0
    Dernier message: 05/01/2010, 17h21
  5. Redirection 301 et .htaccess
    Par Bruno.C dans le forum Apache
    Réponses: 12
    Dernier message: 18/01/2009, 18h27

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