Redirection impossible depuis une page perso 404 ?

Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics

TicTacToe
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 7
Inscription: 28 Fév 2006

Redirection impossible depuis une page perso 404 ?

Message le Jeu Mar 02, 2006 19:36

Bonjour à tous

J'ai redirigé mes pages 404 vers mon fichier php se nommant /404.php.
Ceci à l'aide d'un .htaccess classique.
tout est OK jusqu'ici, ma page 404.php est bien prise en compte.

Par contre, au sein de cette page 404.php, je souhaite faire une redirection automatique vers une autre page (selon certains param...)

OR il s'avère que la redirection au niveau serveur, via script php avec Header ne fonctionne pas ! j'ai du me rabattre sur une redirection html avec 'meta'.

Je vous donne mon code entier, de mon script de mon fichier 404.php.
Pourriez vous m'affirmer ou m'infirmer si mon code est correct, et si c'est le cas, qu'il est effectivement impossible de faire une redirection php avec header( ... ) ???

Merci d'avance Very Happy


La redirection HTML fonctionne correctement (testé et retesté).

Pour tester la redirection via PHP, je retire tout le code entre Début/Fin HTML, et j'enlève le commentaire sur Header( ... ).

Résultat avec le Header(...) en php:
IE -> 404 de windows
FireFox -> page blanche.

fichier /404.php

Code: Tout sélectionner
<?php

// Inits
$dns = $_SERVER['HTTP_HOST'];
$chemin_et_param = $_SERVER['REQUEST_URI'];
$chemin_temp = explode( '?', $chemin_et_param );
$chemin = $chemin_temp[ 0 ];

// Choix décalage
if ( $dns == 'www.xxx.fr' ) $decalage = '/xx';
if ( $dns == 'www.yyy.com' ) $decalage = '/yy';
if ( $decalage == '' ) exit();

// Redirection ou page d'accueil
if ( is_readable( '.' . $decalage . $chemin ) )
  $redir = $dns . $decalage . $chemin_et_param;
else
  $redir = $dns;

// header( 'Location: http://' . $redir ); // MARCHE PAS !

// DEBUT HTML
echo( '<html><head>' );
// redirection html
echo( '<meta http-equiv="refresh" content="0;url= ' );
echo( 'http://' . $redir );
echo( '">' );
// page d'attente
echo( '</head><body>' );
echo( 'Un instant s.v.p.<br>' );
echo( 'Please wait a moment<br><br><br>' );
echo( 'redirection vers:   ' . $redir . '<br><br>');
//echo( 'URL demandée: ' . $chemin_et_param . '<br><br>' );
//echo( 'chemin testé: ' . $decalage . $chemin . '<br><br>' );
// remplissage pour pb IE 512 octets
echo( '
<small style="color: rgb(255, 255, 255);"><small><small><small><small><small><small><small>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill fill<br>
</small></small></small></small></small></small></small></small>
');
echo( '</body></html>' );
// FIN HTML

?>


PS modo: Je suis désolé, j'ai posté aussi dans le forum php... mais je crois que la place de mon post est mieux ici finalement.

alesque
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 338
Inscription: 7 Fév 2004

Message le Jeu Mar 02, 2006 20:38

Je ne réponds pas à la question, mais c'est quoi tous ces "fill" ?

TicTacToe
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 7
Inscription: 28 Fév 2006

Message le Jeu Mar 02, 2006 21:15

:), Je dois dire que j'ai un peu galéré pour trouver le pb. A vrai dire, m'en suis rendu compte tout seul après m'être bien pris la tête, et j'ai trouvé ce lien après.
En gros, dans une page 404 personnalisée, dans IE/Options Avancées/ il y a une option nommée 'Afficher les erreurs HTTP simplifiées par défaut' qui est cochée par défaut.
Le résultat ? toute page 404 qui fait moins de 512 octets, est ignorée et à la place est affichée la fameuse page 404 de Windows... :(
Sur FireFox il n'y a pas le problème.

D'ou le remplissage artificielle, pour que la page soit traitée par IE et que la redirection méta se fasse ! (en attendant que je puisse trouver une solution pour faire la redirection en php si c'est possible ?? 8O )

Après une courte recherche sur le net
http://www.apachefrance.com/Articles/7/page3.html

Note pour les utilisateurs d'Internet Explorer

Internet Explorer 5 et supérieur incluent des pages d'erreur standards présentées à l'internaute si le site Web ne propose pas de pages personnalisées OU si la taille de ces pages est inférieure à une certaine taille en octets (256 ou 512 selon le cas).

Pour contourner ce "problème", vous pouvez soit compléter la page d'erreur avec des commentaires HTML afin d'atteindre 512 octets, soit opter pour l'une des deux modifications suivantes dans Internet Explorer :
• Dans les options d'Internet Explorer, onglet "Avancés", décocher la case "Afficher des messages d'erreur HTTP simplifiés",
• Dans la base de registre, rechercher le dossier HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\ErrorThresholds. Vous trouverez alors plusieurs entrées correspondant à un code HTTP et la taille de page minimum attendue pour afficher la page du site plutôt que la page interne d'IE.


jeanluc
WRInaute accro
WRInaute accro
 
Messages: 3062
Inscription: 3 Mai 2004

Re: Redirection impossible depuis une page perso 404 ?

Message le Jeu Mar 02, 2006 21:59

TicTacToe a écrit:Par contre, au sein de cette page 404.php, je souhaite faire une redirection automatique vers une autre page (selon certains param...)

OR il s'avère que la redirection au niveau serveur, via script php avec Header ne fonctionne pas ! j'ai du me rabattre sur une redirection html avec 'meta'.

Bonjour,

Il y a une contradiction dans ta demande. D'une part, tu utilises la technique de la page 404 personnalisée qui est faite pour renvoyer un code "erreur 404" au visiteur et, d'autre part, tu essaies de renvoyer un code de redirection (301 ou 302 ?). Clairement, ta page ne peut renvoyer qu'un seul code.

Jean-Luc

TicTacToe
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 7
Inscription: 28 Fév 2006

Message le Jeu Mar 02, 2006 23:59

??? je comprends pas ...

Je comprends pas ton interrogation.
En fait je viens de fusionner 2 sites qui avaient chacun leur espace et leur DNS. Ils se retrouvent sur 1 seul espace avec les 2 DNS pointants sur ce même espace dorénavant.

Ces 2 sites je les ai mis chacun dans un dossier différent, c'est quand même plus propre.

Donc, pour que ce soit tranparent pour le user, s'il à bookmarké un lien d'un des 2 sites, il ne sera plus valide... SAUF si je gère le décalage de dossier.

URL Invalide (sans le décalage de dossier) -> page 404 perso -> traitement de l'URI -> redirection dans le bon dossier OU page d'accueil si l'URI ne peut vraiment pas être retrouvée. Et ceci, en fonction du DNS tapé pour accéder à l'un des 2 sites.

le code que j'ai posté, en laissant le commentaires sur le code PHP header(...) fait exactement ce que je veux. Cela fonctionne.

Mais ca me parait moyennement satisfaisant car cela peut faire apparaitre la page de redirection pdt qq sec (vu que c'est traité coté client)... en php ce serait mieux, mais ca marche pas :(

PS: la redirection sur l'index principal de l'espace traite déjà ma redirection sur l'un des 2 sites en fonction du DNS tapé par le user, et là ca fonctionne très bien avec le header(...) en PHP


jeanluc
WRInaute accro
WRInaute accro
 
Messages: 3062
Inscription: 3 Mai 2004

Message le Ven Mar 03, 2006 8:42

TicTacToe a écrit:Ces 2 sites je les ai mis chacun dans un dossier différent, c'est quand même plus propre.

Donc, pour que ce soit tranparent pour le user, s'il à bookmarké un lien d'un des 2 sites, il ne sera plus valide... SAUF si je gère le décalage de dossier.
D'accord.

TicTacToe a écrit:URL Invalide (sans le décalage de dossier) -> page 404 perso -> traitement de l'URI -> redirection dans le bon dossier OU page d'accueil si l'URI ne peut vraiment pas être retrouvée. Et ceci, en fonction du DNS tapé pour accéder à l'un des 2 sites.
Je verrais ceci autrement : URL "ancien style" (sans le décalage de dossier) -> traitement par .htaccess qui reconnaît l'URL "ancien style" et qui redirige vers le bon dossier ou la page d'accueil par une redirection 301. Il faut donc agir avant la détection de l'erreur 404.

Quelles sont les différences ? Ici il n'est plus question d'erreur 404, car, en fait, tu ne veux pas indiquer une erreur, mais faire une redirection. Le choix de la redirection 301 est optimal pour le référencement.

TicTacToe a écrit:le code que j'ai posté, en laissant le commentaires sur le code PHP header(...) fait exactement ce que je veux. Cela fonctionne.

Mais ca me parait moyennement satisfaisant car cela peut faire apparaitre la page de redirection pdt qq sec (vu que c'est traité coté client)...
D'accord.

TicTacToe a écrit:en php ce serait mieux, mais ca marche pas
Je disais même que ça ne peut pas marcher puisqu'avec ta solution tu essaies d'envoyer pour une seule page, un code 404 et un code 301 ou 302. Pour que ça marche, il ne faut plus partir d'une situation d'erreur 404.

J'espère que ceci est plus clair. :wink:

Jean-Luc

TicTacToe
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 7
Inscription: 28 Fév 2006

Message le Ven Mar 03, 2006 10:18

:D

Alors là merci beaucoup !
C'est la 1ere fois que qq'un comprend exactement ce problème :)

Je dois dire que je suis très novice dans ce type de problème. :oops:

Cela me rassure également de savoir que ce n'est pas possible en php.

Je ne saisie pas exactement comment sont gérés ces code 404, 302,301 etc...
qui les envoie, qui les récupère, qui les traite ... ? mais je vais me renseigner.

Actuellement, dans mon .htaccess, je n'ai que:
Code: Tout sélectionner
ErrorDocument 404 /404.php


SI je comprends bien, c'est au niveau de ce .htaccess, qu'il me faut gérer le décalage
Par contre si le lien n'existe pas, je voudrais revenir sur ma page d'accueil mais.... du site correct / dns

Ex: qqun tape www.xx.fr/undossier/unepage.htm

Dans un 1er temps, le .htaccess va rediriger automatiquement vers le lien:
www.xx.fr/xx/undossier/unepage.htm
si le lien existe, pas de problème, la page est chargée.

Si le lien n'existe pas, un 404 va être générée. Et là je retombe sur le même problème. Car je souhaite que la page principale soit affichée, mais la page principale du bon site !

- si je déclare mon /index.php actuelle comme page 404. Ce fichier index.php fait déjà une redirection vers www.xxx.fr/xx/ ou www.yyy.com/yy/ en fonction du DNS récupéré, donc ca ne marchera pas car je retomberai sur le même pb qu'actuellement :(

L'URL Rewriting permet visiblement de faire bcp de chose, mais j'y connais rien, je vais potasser sur le forum, il y a l'air d'avoir beaucoup d'infos :)

En résumé:

J'ai 2 sites logiques sur un meme espace physique
www.xx.fr/xx/
www.yy.com/yy/
étant donné que les 2 DNS pointent sur ce même espace physique.

lorsque un user tape www.xx.fr il doit se retrouver sur www.xx.fr/xx
lorsque un user tape www.xx.fr/bidule il doit se retrouver sur www.xx.fr/xx/bidule
lorsque un user tape www.xx.fr/url_invalide il doit se retrouver sur www.xx.fr/xx

Exactement même topo s'il remplace xx.fr par yy.com !

C'est possible par URLRewriting dans un .htaccess ?? avant que je me lance ?

Dans tous les cas merci de ta réponse précédente Jeanluc


jeanluc
WRInaute accro
WRInaute accro
 
Messages: 3062
Inscription: 3 Mai 2004

Message le Ven Mar 03, 2006 13:35

TicTacToe a écrit:Dans un 1er temps, le .htaccess va rediriger automatiquement vers le lien:
www.xx.fr/xx/undossier/unepage.htm
si le lien existe, pas de problème, la page est chargée.
Ok.

TicTacToe a écrit:Si le lien n'existe pas, un 404 va être générée. Et là je retombe sur le même problème. Car je souhaite que la page principale soit affichée, mais la page principale du bon site !
A ce niveau, plutôt que de faire une redirection, tu pourrais faire un include PHP de la bonne page.

TicTacToe a écrit:L'URL Rewriting permet visiblement de faire bcp de chose, mais j'y connais rien, je vais potasser sur le forum, il y a l'air d'avoir beaucoup d'infos
Vois aussi ces deux bonnes adresses :
- Le fichier .htaccess
- mod_rewrite et la réécriture d’URL

TicTacToe a écrit:C'est possible par URLRewriting dans un .htaccess ?? avant que je me lance ?
Tu peux arriver à tes fins en combinant .htaccess et un peu de PHP, mais je n'ai pas le temps d'approfondir pour l'instant.

Jean-Luc

TicTacToe
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 7
Inscription: 28 Fév 2006

Message le Ven Mar 03, 2006 18:41

Merci pour ces infos :D

haugure
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 38
Inscription: 21 Oct 2005

Message le Lun Mar 06, 2006 17:03

A mon avis tu as une redirection apache donc forcément un header envoyé par apache. Php ne peut donc pas faire de nouvelle redirection puisque le header a déjà été envoyé.

+1 avec jeanluc l'include est la bonne solution je pense ;)


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités