Status: 301 Moved Permanently

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 !
 
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 ...
 
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...

@+
 
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.
 
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 :)
 
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>
 
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:
 
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
 
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. ;)
 
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
 
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:
 
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.

++
 
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
 
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;
?>
 
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 ?
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut