Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/10/2011, 18h33   #1
Membre Expert
 
Avatar de kolodz
 
Homme Patrick Kolodziejczyk
Étudiant
Inscription : avril 2008
Messages : 440
Détails du profil
Informations personnelles :
Nom : Homme Patrick Kolodziejczyk
Âge : 24
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : avril 2008
Messages : 440
Points : 1 559
Points : 1 559
Envoyer un message via MSN à kolodz
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 :
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 :
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.
__________________
N'oubliez pas de marquer vos discussions
Si une réponse vous a été utile pensez à voter Pour
Pensez à la javadoc
kolodz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 20h54   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 295
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 295
Points : 8 575
Points : 8 575
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 :
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.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 14h32   #3
Membre Expert
 
Avatar de kolodz
 
Homme Patrick Kolodziejczyk
Étudiant
Inscription : avril 2008
Messages : 440
Détails du profil
Informations personnelles :
Nom : Homme Patrick Kolodziejczyk
Âge : 24
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : avril 2008
Messages : 440
Points : 1 559
Points : 1 559
Envoyer un message via MSN à kolodz
Merci beaucoup !

La piste (c'est une autoroute à ce niveau) que tu donne m'a permis de trouver la solution :
Code :
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.
__________________
N'oubliez pas de marquer vos discussions
Si une réponse vous a été utile pensez à voter Pour
Pensez à la javadoc
kolodz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 16h13   #4
Membre Expert
 
Avatar de kolodz
 
Homme Patrick Kolodziejczyk
Étudiant
Inscription : avril 2008
Messages : 440
Détails du profil
Informations personnelles :
Nom : Homme Patrick Kolodziejczyk
Âge : 24
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : avril 2008
Messages : 440
Points : 1 559
Points : 1 559
Envoyer un message via MSN à kolodz
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.
__________________
N'oubliez pas de marquer vos discussions
Si une réponse vous a été utile pensez à voter Pour
Pensez à la javadoc
kolodz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 21h27   #5
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 295
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 295
Points : 8 575
Points : 8 575
Dans ce cas, faut essayer les variables d'environnement :
Code :
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]
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 11h09   #6
Membre Expert
 
Avatar de kolodz
 
Homme Patrick Kolodziejczyk
Étudiant
Inscription : avril 2008
Messages : 440
Détails du profil
Informations personnelles :
Nom : Homme Patrick Kolodziejczyk
Âge : 24
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : avril 2008
Messages : 440
Points : 1 559
Points : 1 559
Envoyer un message via MSN à kolodz
Mon accès à la variable d'environnement ne fonctionne pas...

Si je réalise ceci :
Code :
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 :
echo $_SERVER["REDIRECT_INTERNAL"];
Par contre si je réalise ceci :
Code :
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.
__________________
N'oubliez pas de marquer vos discussions
Si une réponse vous a été utile pensez à voter Pour
Pensez à la javadoc
kolodz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 13h57   #7
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 295
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 295
Points : 8 575
Points : 8 575
Citation:
Envoyé par kolodz Voir le message
Par contre si je réalise ceci :
Code :
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 tu dis que PHP n'arrive pas à lire la variable, j'en déduis qu'au moins tu as réussi à exécuter du code PHP avec cette règle ? Ce que je veux dire c'est qu'il n'est pas nécessaire que PHP puisse lire la variable d'environnement pour que la redirection marche : l'objectif c'est que la réécriture fonctionne, que PHP lise la variable d'environnement, c'est un autre problème.

Donc est-ce que cette configuration réécrit correctement l'URL ?
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 15h51   #8
Membre Expert
 
Avatar de kolodz
 
Homme Patrick Kolodziejczyk
Étudiant
Inscription : avril 2008
Messages : 440
Détails du profil
Informations personnelles :
Nom : Homme Patrick Kolodziejczyk
Âge : 24
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : avril 2008
Messages : 440
Points : 1 559
Points : 1 559
Envoyer un message via MSN à kolodz
Sauf que cela fonction seulement parce que j'ai une variable en get qui rend la redirection incompatible avec le framework du projet.

Je parle de php parce que c'est un moyen de voir les variables.
Je pense que :

La lecture de la variable d'environnement n'est pas correcte dans mon htaccess.
Car elle est bien setté avec mon "setenv" vue que php arrive à la voir après.

Que le flag qui set la variable d'environnement dans ma redirection ne fonctionne pas :
Code :
E=REDIRECT_INTERNAL:true
Car celle-ci n'est pas vue après coup par php.

Cordialement,
K
__________________
N'oubliez pas de marquer vos discussions
Si une réponse vous a été utile pensez à voter Pour
Pensez à la javadoc
kolodz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 21h10   #9
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 295
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 295
Points : 8 575
Points : 8 575
Je n'avais pas vu l'erreur :
Citation:
Envoyé par kolodz Voir le message
Code :
RewriteRule ^(.*)$ /index.php/$1?redirect_internal=true [R=302,E=REDIRECT_INTERNAL:true,L]
Tu ne peux pas définir une variable d'environnement (E=...) et rediriger en même temps (R=...) : la variable d'environnement a un scope requête, donc dès que le navigateur fait une nouvelle requête la variable d'environnement n'existe plus.

As-tu essayé la configuration que j'ai donnée ? Pour rappel :
Code :
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 la fait !
RewriteCond %{ENV:redirect_internal} !^true$
RewriteRule ^(.*)$ /index.php/$1 [E=redirect_internal:true,L]
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 10h37   #10
Membre Expert
 
Avatar de kolodz
 
Homme Patrick Kolodziejczyk
Étudiant
Inscription : avril 2008
Messages : 440
Détails du profil
Informations personnelles :
Nom : Homme Patrick Kolodziejczyk
Âge : 24
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : avril 2008
Messages : 440
Points : 1 559
Points : 1 559
Envoyer un message via MSN à kolodz
Ton scripte présente une boucle de redirection.
Cette ligne ici :
Code :
RewriteCond %{ENV:redirect_internal} !^true$
Ne match jamais.
__________________
N'oubliez pas de marquer vos discussions
Si une réponse vous a été utile pensez à voter Pour
Pensez à la javadoc
kolodz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 23h20   #11
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 295
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 295
Points : 8 575
Points : 8 575
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
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h52.


 
 
 
 
Partenaires

Hébergement Web