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

Langage PHP Discussion :

erreur fonction redirection 301


Sujet :

Langage PHP

  1. #1
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    Février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut erreur fonction redirection 301
    Bonjour,

    je me suis développé une petite fonction pour gêrer mes 301 internes sans devoir systématiquement mettre à jour mon htaccess, et surtout pouvoir y atteler certaines conditions.

    Cependant, depuis le site ne fonctionne plus que sur Firefox, tous les autres navigateurs me donnent une erreur de page inexistante si j'appelle cette fonction.

    Est-ce que quelqu'un peux m'expliquer ce que j'ai mal fait ?

    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
    // Redirection en interne pour url précise
    	function in301($url, $url_out) {
    		global $$url;
    			// On informe de la 301
    			header("Status: 301 Moved Permanently", false, 301);
    			// On crée la 301
    			if(empty($url)) {
    				header("Location: http://".$_SERVER['SERVER_NAME'].$racine_home."/".$url);
    			} else {
    				// Si l'url demandée correspond à 
    				if ($_SERVER['REQUEST_URI'] == $racine_home.'/'.$url) {
    					header("Location: http://".$_SERVER['SERVER_NAME'].$racine_home."/".$url_out);
    				}
    			}
    		return $url;
    	}
    $racine_home =

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	// initialisation de la racine de votre site ( meilleure gestion du rewriting 
    	// By Crazy aka Alain Gaydon | http://www.cigiema.fr
    	$repertoire = explode("/", $_SERVER["PHP_SELF"]); 
    	$racine_home = '/'.$repertoire[1];
    	if ($racine_home == $_SERVER["PHP_SELF"]) $racine_home = '';
    edit : la fonction est apellée comme ce :

    in301('page.php','page/');
    in301('index.php',$racine_home);

    etc...

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Tu as 301 internes !
    Ca doit pas être facile de gérer un aussi grand internat !
    Commet tu leur fais faire leurs devoirs ?

    ...




    PLus sérieusement, je pense que tu peux d'abord regarder si la variable $_SERVER est bien alimentée, avec var_dump bien sûr.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    C'est quoi ce "global $$url" ?

    Pas besoin de double $
    pas besoin de variable globale, elle est déjà en paramètre.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  4. #4
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    Février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut
    hu,

    j'ai cru lire,
    que si je voulais pouvoir

    in301('page.php',$variable)

    je devais mettre $$global

    Bref,

    je met quoi ?

    juste $url ? sans global $ ?

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Him Voir le message
    hu,

    j'ai cru lire,
    que si je voulais pouvoir

    in301('page.php',$variable)

    je devais mettre $$global

    Bref,

    je met quoi ?

    juste $url ? sans global $ ?
    Ben... Ouais.

    Allez, j'ai la patate, je vais pas faire mon fainéant :

    Code php : 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
     
    // Redirection en interne pour url précise
    	function in301($url, $url_out) {
    			// On informe de la 301
    			header("Status: 301 Moved Permanently", false, 301);
    			// On crée la 301
    			if(empty($url)) {
    				header("Location: http://".$_SERVER['SERVER_NAME'].$racine_home."/".$url);
    			} else {
    				// Si l'url demandée correspond à 
    				if ($_SERVER['REQUEST_URI'] == $racine_home.'/'.$url) {
    					header("Location: http://".$_SERVER['SERVER_NAME'].$racine_home."/".$url_out);
    				}
    			}
    		return $url;
    	}

    Hélas, je pense que cela n'a rien à voir avec ton problème.
    La variable $$url n'était jamais utilisée.
    Je voulais juste pointer un problème de base.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  6. #6
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    Février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut
    tu fais bien

    Tu ne me l'aurais pas dis, je serais toujours aussi inculte

    je regarde si cela à une incidence quelconque.


    [edit] question : tu "return $url"

    mais à quoi correspond $url maintenant ?

    [edit2] effectivement, cela n'a aucune incidence...

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Him Voir le message
    tu fais bien

    Tu ne me l'aurais pas dis, je serais toujours aussi inculte

    je regarde si cela à une incidence quelconque.


    [edit] question : tu "return $url"

    mais à quoi correspond $url maintenant ?
    Et ben... à rien !

    Le but de ta fonction n'est pas de retourner, même pas d'arriver au bout, puisque son vrai but est de rediriger vers une autre page.
    Si tout se passe comme prévu, cher Hannibal Smith, tu ne verra jamais le return.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  8. #8
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    Février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut
    ok ok, merci !

    sinon effectivement, aucune incidence sur le problème.

  9. #9
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Je viens de voir un truc : la variable $racine_home n'est pas initialisée dans la fonction... Pas bon ça.

    J'essaies de te trouver un tuto sur la portée des variables, je crois que tu en as besoin.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  10. #10
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    La page maison :

    http://php.developpez.com/faq/?page=variablesportee

    Lis, adaptes, et si ça foire, reviens nous voir.

    Et si ça marche, reviens nous voir quand même pour donner la soluce qui pourrait intéresser d'autres personnes.

    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  11. #11
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    Février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut
    Hi,

    merci pour ces liens,

    donc si j'ai bien compris, c'est la que devrait être global..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	// Redirection en interne pour url précise
    	function in301($url, $url_out) {
    		global $racine_home;
    			// On informe de la 301

    Mais le problème reste le même !
    sous firefox, OK, sur les autres browser : "xxx ne peux pas afficher cette page web"

    En tous les cas, merci d'avance pour ton aide qui m'est très précieuse.

  12. #12
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Oui tu as bien compris.
    Une alternative que je préfère à global est d'ajouter la variable $racine_home aux paramètres de la fonction. Ainsi cette fonction est indépendante du contexte global. En fait, je n'aime pas trop global et je pense qu'il faut l'utiliser le moins possible.

    Maintenant, suite de l'analyse du déroulement de la fonction :
    que fait cette ligne :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header("Status: 301 Moved Permanently", false, 301);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  13. #13
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    Février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut
    Elle informe de la 301 !

    J'ai toujours écris mes header comme ce :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    			header("Status: 301 Moved Permanently", false, 301);
    			header("Location: http://truc.blabla.com");
    Qui à toujours marché & marche toujours sur mes autres sites.

    Et comme ma fonction joue sur l'existence du deuxième paramètre, j'ai indiqué cette ligne avant mon if, & la ligne "Location:" elle est remplie en fonction de la condition.

  14. #14
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Je me demande si ce n'est pas là ton problème.
    As-tu vraiment besoin de cette ligne ?
    Pour test, ne veux-tu pas essayer de l'enlever ?
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  15. #15
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    Février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut
    Roh,

    t'es un dieux =)

    ça marche !!!!!

    le header() n'a pas apprécié d'être coupé en deux par le if() !

    Bref, voici la fonction finale !

    MERCI 1000 FOIS JML94 !
    developpez.net peux être fier d'avoir des gars comme toi dans son équipe !

    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
    // initialisation de la racine de votre site ( meilleure gestion du rewriting 
    	// By Crazy aka Alain Gaydon | http://www.cigiema.fr
    	$repertoire = explode("/", $_SERVER["PHP_SELF"]); 
    	$racine_home = '/'.$repertoire[1];
    	if ($racine_home == $_SERVER["PHP_SELF"]) $racine_home = '';
     
    	// Quelques fonctions utiles pour un meilleur référencement
    	// (c) 2007 - 2008 himselfprod.com
    	// Donot remove copyrights !
     
    	// Redirection en interne pour url précise
    	function in301($url, $url_out) {
    		global $racine_home;
    			// On informe de la 301
    			//header("Status: 301 Moved Permanently", false, 301);
    			// On crée la 301
    			if(empty($url)) {
    				header("Status: 301 Moved Permanently", false, 301);
    				header("Location: http://".$_SERVER['SERVER_NAME'].$racine_home."/".$url);
    			} else {
    				// Si l'url demandée correspond à 
    				if ($_SERVER['REQUEST_URI'] == $racine_home.'/'.$url) {
    					header("Status: 301 Moved Permanently", false, 301);
    					header("Location: http://".$_SERVER['SERVER_NAME'].$racine_home."/".$url_out);
    				}
    			}
    		return $url;
    	}

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

Discussions similaires

  1. Erreur de redirection
    Par adlich dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/04/2006, 14h44
  2. Réponses: 1
    Dernier message: 18/04/2006, 14h05
  3. [DOM XML] Erreur fonction load() d'un objet dom??
    Par ribrok dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/10/2005, 12h43
  4. [ Struts ] erreur de redirection
    Par CapToMatteo dans le forum Struts 1
    Réponses: 4
    Dernier message: 30/04/2004, 18h22
  5. méssage d'erreur fonction d'agrégat
    Par developpeur_mehdi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/03/2004, 13h42

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