Status: 301 Moved Permanently

Nouveau WRInaute
Bonjour a tous !

voila j'ai un gros probleme ...
depuis 2 ou 3 mois je refait le site de mon entreprise (hebergé par online.net), les anciennes pages sont toujours referencer sur google alors que j'ai mis une page 404 perso ... je regarde le header de ma page 404perso et ca m'indique "HTTP/1.x 200 OK" (normalement le htaccess met la valeur "HTTP/1.x 404 Not Found" au header... ms pas chez online !)

mais je ne voudrai pas perdre mon referencement sur google... alors autant faire un RedirectPermantent dans le Htaccess..

Premiere surprise :
le htaccess ne permet pas d'utiliser les "RedirectPermanent" ca fait une erreur 500... J'ai demander a Online et ils m'on repondu un truc du genre : "C'est pas possible et on autre chose a faire que de reparer ca !"
Solution :
Je me suis lancer dans un script en php qui me permeterai de faire la meme chose

Forcement pour savoir ou rediriger la page il faut savoir qu'elle page a été demandée...

Seconde surprise :
la variable globale "$_SERVER['REQUEST_URI']" me donne l'adresse de ma page 404 (page 404 perso appelée grace au htaccess)
Sur EasyPHP, avec le meme script, c'est bien la valeure de la page demandée qui s'affiche
Solution :
l'url de la page demandée est toujour affichée dans la barre d'adresse du navigateur, je vais donc la recuperer en javascript ...

Nouveau probleme :
le javascript fait planter la fonction header() ... c'est normal me direz vous !

Voila je sais pu quoi faire ...

Mon htaccess (qui marche)
Code:
ErrorDocument 404 /index.php?p=err&error=404
la variable $p permet d'inclure le message d'erreur dans le desing du site, la meme page est charger si on met une valeur incorrect a $p (faites le test sur le site si vous voulez)

mon code actuel :
Code:
$error = @$_GET['error']; 
<script>
var URL = document.location.href;
</script>
<?
$request_URL = "<script>document.write(URL);</script>";
$referrer = @$_SERVER['HTTP_REFERER'];

if (ereg("gamme2.htm", $request_URL)){$redirect='http://www.la-palmeraie.fr/index.php?p=Catalogue';}
if (ereg("gamme3.htm", $request_URL)){$redirect='http://www.la-palmeraie.fr/index.php?p=Catalogue';}
if (ereg("gamme4.htm", $request_URL)){$redirect='http://www.la-palmeraie.fr/index.php?p=Catalogue';}
if (ereg("ventes.html", $request_URL)){$redirect='http://www.la-palmeraie.fr/index.php';}

//....


if (@$redirect!='')
{
header("Status: 301 Moved Permanently", false, 301);
header("Location: ".$redirect);
}
else
{
	if($error=='404')
	{
		header("HTTP/1.0 404 Not Found", false, 404);
	}
}
?>

Merci d'avance a tous ceux qui essaient de m'aider !
 
Nouveau WRInaute
oué ca je sais, avec mon code j'arrive a recuperer la valeur "document.location.href" dans le php mais ca fait planter le header...
je sais que c'est forcement pas la bonne solution et je cherche une alternative ...
 
WRInaute passionné
Pas la peine de répéter hein... ;)

Il faut executer le script PHP avant toute autre envoi.
Dans ce cas, tu envoie un header HTML en premier (car balise <script>).

Ton fichier doit commencer par

<?php
... ton script
?>


Atention, ne saute pas de ligne ou n'ajoute pas d'espace dans ton début de fichier, la balise doit être bien située au premier caractere du fichier...

@+
 
Nouveau WRInaute
vous me donnez pas beaucoup de solutions ...
tu dit que je repete ms vous me repondez ce que j'ai dit dans mon premier message : "le javascript fait planter la fonction header()"

Je sais bien que pour le header() il ne faut que du code php avant, c'est pour cela que je vous demande une solution car moi je ne sais plus quoi faire.
 
WRInaute accro
tu recupere ton adresse en javascript, il te suffit de la recuperer en php à la place, et de faire ton traitement en php :
$_SERVER['REQUEST_URI']

voilà la solution que tu attendais :)
 
WRInaute passionné
tu dit que je repete ms vous me repondez ce que j'ai dit dans mon premier message : "le javascript fait planter la fonction header()"

Tu n'as pas posté en double au début ? C'était pour cela, en aucun cas pour ton probleme. ;)

<a cote>
+1 pour E-Kiwi,
$_SERVER['REQUEST_URI']
Et tous tes problemes s'envolent ;)
</a cote>
 
WRInaute passionné
e-kiwi a dit:
tu recupere ton adresse en javascript, il te suffit de la recuperer en php à la place, et de faire ton traitement en php :
$_SERVER['REQUEST_URI']

voilà la solution que tu attendais :)

T'aurais pu prendre la peine de lire le post!
Ca t'aurait éviter de répondre à côté :lol:
 
Nouveau WRInaute
effectivement je l'avais poster en double (j'ai rectifier)

sinon pour le $_SERVER['REQUEST_URI'] j'ai marquer ca dans mon premier post :

Code:
 Seconde surprise :
la variable globale "$_SERVER['REQUEST_URI']" me donne l'adresse de ma page 404 (page 404 perso appelée grace au htaccess)
Sur EasyPHP, avec le meme script, c'est bien la valeure de la page demandée qui s'affiche
 
WRInaute passionné
et ils m'on repondu un truc du genre : "C'est pas possible et on autre chose a faire que de reparer ca !"

Solution :
Je me suis lancer dans un script en php qui me permeterai de faire la meme chose

Seconde solution: changement d'hébergeur ? =)

Pas facile à imposer dans son entreprise je le reconnais, mais pour ton cas, et étant donné la bonne foi de ton prestataire cela pourrait s'avérer payant. ;)
 
Nouveau WRInaute
oué j'y ai penser mais bon mon site est pas bien gros ,
je pense pas que soit valable de changer d'hebergeur pour ca ... surtt qu'on a 2 autres sites chez eux !

enfin si jamais vous avez une autre idée je suis preneur ! meme juste une piste
 
WRInaute discret
Je me pose une grande question récemment, je gère plusieurs sites, avec des changements notoires dans l'architecture, nom des pages qui changent ( pour le référencement ), hébergé en mutualisé chez 1and1, avec un paquet de bonne redirections 301.

Le problème : 1&1 n'aime pas trop diriger l'erreur 404 .. chaque changement de nom de fichier impose une nouvelle ligne dans le .htaccess .. y'à t-il un moyen de générer ce dernier avec une adresse de fichier php ? Ou de procéder à un quelconque include en son sein ?

Pour info j'ai à peu près 300 redirections de la sorte .. Le projet était un foutoir à ses départs, trop rapidement référence :roll:
 
WRInaute accro
spyk a dit:
effectivement je l'avais poster en double (j'ai rectifier)

sinon pour le $_SERVER['REQUEST_URI'] j'ai marquer ca dans mon premier post :

Code:
 Seconde surprise :
la variable globale "$_SERVER['REQUEST_URI']" me donne l'adresse de ma page 404 (page 404 perso appelée grace au htaccess)
Sur EasyPHP, avec le meme script, c'est bien la valeure de la page demandée qui s'affiche

Si tu veux pouvoir traiter ces pages pour les rediriger en 301, il ne faut pas les déclarer en 404 auparavant, mais traiter la redirection directement depuis l'URI à rediriger.

++
 
WRInaute discret
HawkEye a dit:
Si tu veux pouvoir traiter ces pages pour les rediriger en 301, il ne faut pas les déclarer en 404 auparavant, mais traiter la redirection directement depuis l'URI à rediriger.
Pourtant, sur un site hébergée chez ovh, je peux parfaitement declarer 404.php pour erreur 404 et faire des redirections à volonté selon l'URI .. bien plus simple qu'éditer l'htaccess
 
WRInaute accro
BobbySixKiller a dit:
HawkEye a dit:
Si tu veux pouvoir traiter ces pages pour les rediriger en 301, il ne faut pas les déclarer en 404 auparavant, mais traiter la redirection directement depuis l'URI à rediriger.
Pourtant, sur un site hébergée chez ovh, je peux parfaitement declarer 404.php pour erreur 404 et faire des redirections à volonté selon l'URI .. bien plus simple qu'éditer l'htaccess

Il a l'air de ramer un peu plus ;)

Perso, ce que je ferais, c'est ceci (en considérant que toutes les pages doivent dégager...):

Dans .htaccess:

Code:
RewriteEngine On
RewriteRule ^(.*)$ error.php?uri=$1 [L]

Dans error.php:

Code:
<?php
// décision, et définition logique de $redirect_url sur base de $_GET['uri']

(yours to define...)

// Redirection 301 vers l'URL défini plus haut

	header("Status: 301 Moved Permanently", false, 301);
	header("Location: ".$redirect_url."");
exit;
?>
 
WRInaute discret
Sur la base d'un rewrite 404 ..
avec un fichier de fonctions toujours inclus, ça marche aussi ;)

Plus qu'à faire un switch($URI) pour rediriger ;)

Par contre vous ne vous êtes jamais étonnés d'avoir une page sans pagerank indexée et première des résultats google sur une dizaine de mots clefs ?
 
Discussions similaires
Haut