redirection de pages d'erreurs

WRInaute impliqué
Hello,
Donc, mieux vaut tard que jamais, je viens de me rendre compte (merci jeunZ) que mes pages dérreur étaient en 302.

Mon problème est donc le suivant :
J'utilise une page d'érreur error.php qui est appélée comme suit dans le .htaccess :

Code:
ErrorDocument 400 /error.php?mode=400
ErrorDocument 403 /error.php?mode=403
ErrorDocument 404 /error.php?mode=404
ErrorDocument 500 /error.php?mode=500

L'url finale en cas d'affichage de la page est plus complexe car il intègre des paramètres de recherche.

Des truc du genre error.php?mode=500&blabli&blablo&etencoreblabblabli&etc...

Je ne sais donc pas comment faire pour rétablir le bon http header.

jeunZ suggère d'utiliser plutot des truc du genre ErrorDocument 400 /400.php mais il fadrait alors faire du rewriting pour que 400.php soit reconnu comme /error.php?mode=400&blabli&blablo&etencoreblabblabli&etc...

Ce qui m'as pas lair bien facile si tant est que ce soit faisable.

Enfin si quelqu'un à une idée, je suis preneur.


++
 
WRInaute accro
Code:
header('HTTP/1.1 200 OK');
tu remplace l'erreur 302 par une "erreur" 200, qui dit que la page s'est chargée correctement.
et plus aucun probleme ...
 
WRInaute impliqué
KaZhaR a dit:
Code:
header('HTTP/1.1 200 OK');
tu remplace l'erreur 302 par une "erreur" 200, qui dit que la page s'est chargée correctement.
et plus aucun probleme ...

héhé, le problème c'est que je ne sais pas comment envoyer le header.

Dans error.php, j'ai bien :
Code:
switch( $mode )
{
	case '400':
		include ($phpbb_root_path.'language/lang_' . $board_config['default_lang'] . '/lang_error_400.'.$phpEx);
		$order_by = "user_regdate $sort_order LIMIT $start, " . $board_config['topics_per_page'];
		break;
	case '401':
		include ($phpbb_root_path.'language/lang_' . $board_config['default_lang'] . '/lang_error_401.'.$phpEx);
		$order_by = "username $sort_order LIMIT $start, " . $board_config['topics_per_page'];
		break;
	case '403':
		include ($phpbb_root_path.'language/lang_' . $board_config['default_lang'] . '/lang_error_403.'.$phpEx);
		$order_by = "user_from $sort_order LIMIT $start, " . $board_config['topics_per_page'];
		break;
	case '404':
		include ($phpbb_root_path.'language/lang_' . $board_config['default_lang'] . '/lang_error_404.'.$phpEx);
		$order_by = "user_posts $sort_order LIMIT $start, " . $board_config['topics_per_page'];
		break;
	case '500':
		include ($phpbb_root_path.'language/lang_' . $board_config['default_lang'] . '/lang_error_500.'.$phpEx);
		$order_by = "user_regdate $sort_order LIMIT $start, " . $board_config['topics_per_page'];
		break;
	case 'nimda':
		include ($phpbb_root_path.'language/lang_' . $board_config['default_lang'] . '/lang_error_nimda.'.$phpEx);
		$order_by = "username $sort_order LIMIT $start, " . $board_config['topics_per_page'];
		break;
	case 'codered':
		include ($phpbb_root_path.'language/lang_' . $board_config['default_lang'] . '/lang_error_codered.'.$phpEx);
		$order_by = "user_from $sort_order LIMIT $start, " . $board_config['topics_per_page'];
		break;
	case 'badua':
		include ($phpbb_root_path.'language/lang_' . $board_config['default_lang'] . '/lang_error_badua.'.$phpEx);
		$order_by = "user_posts $sort_order LIMIT $start, " . $board_config['topics_per_page'];
		break;
	case 'noagent':
		include ($phpbb_root_path.'language/lang_' . $board_config['default_lang'] . '/lang_error_noagent.'.$phpEx);
		$order_by = "username $sort_order LIMIT $start, " . $board_config['topics_per_page'];
		break;
	case 'noformmail':
		include ($phpbb_root_path.'language/lang_' . $board_config['default_lang'] . '/lang_error_noformmail.'.$phpEx);
		$order_by = "user_from $sort_order LIMIT $start, " . $board_config['topics_per_page'];
		break;
	case 'leech':
		include ($phpbb_root_path.'language/lang_' . $board_config['default_lang'] . '/lang_error_leech.'.$phpEx);
		$order_by = "user_from $sort_order LIMIT $start, " . $board_config['topics_per_page'];
		break;
	default:
		include ($phpbb_root_path.'language/lang_' . $board_config['default_lang'] . '/lang_error_why.'.$phpEx);
		$order_by = "user_regdate $sort_order LIMIT $start, " . $board_config['topics_per_page'];
		break;
}

Qui me donne envie d'envoyer à ce stade le header approprié, mais je ne sais pas comment cela focntionne. Y a t il une variable ou une fonction consacrée pour apache ou est ce du pur php?

Merci de ta réponse en tous cas ...

++
 
WRInaute accro
la fonction header permet d'envoyer le header.
à utiliser exactement comme je te l'ait donné.

et je te conseille de le placer tout en haut de ta page, tu n'aura pas de probleme de headers already sent comme cela ;)
 
WRInaute impliqué
ahh bah en fait il marche nikel mon truc lol.

C'etais juste $phpbb_root_path = './'; au lien de $phpbb_root_path = '/';, qui bizarrement se retrouvais dans l'url, sauf, encore plus bizarement, pour les 400.

Du coup c'est corrigé et tout marche direct.

Merci encore, rien de tel qu'une piste pour fourrer sont nez dans du code

++
 
WRInaute impliqué
Lol en fait ça ne marchais pas, j'avais le bon header, parce que de faire ce que j'ai fait renvoyais une pure 404 (pas de chargement de error.php), du coup l'outil wri revoyais le bon header lol, mais la page n'existait vraimebt pas.

Donc, je me suis cassé la tête sur ce bout de code :
Code:
	redirect($phpbb_root_path . 'error.' . $phpEx . '?mode=' . $mode . '&show&search_keywords=' . $searchinfo[0] . '&search_engine=' . $searchinfo[1] . '&search_engine_url=' . $searchinfo[2] . '&search_engine_count=' . $searchinfo[3] . '&search_start_time=' . (time() - $time));

Qui je le crois est responsable de la 302.

Le problème c'est que j'ai beau eu chercher, je n'ai rien trouver (du tout lol) sur la syntaxe de la fonction redirect, a n'y rien comprendre.
J'aurais espéré que cette fonction integre une option d'envois de header, mais je ne trouve pas.

Du coup je me demande comment faire.

1) redirect peremt il d'envoyer un header ?
2) si non, y'a it moyen, en utilisant le switch que j'ai posté plus haut, d'ajouter à ce stade le bon header calculé plus haut et comment ? (j'ai bien essayé, mais ajouter header('HTTP/1.1 200 OK'); (ou autre) avant ou après le redirect ne change rien.
3) faut il donc enviseager des règle d'url rewriting (404.php => error.php?mode=404&{query string} et comment?

Voilà si vous avez des pistes ....
++
 
WRInaute impliqué
Bon, bah j'ai eu recours à la méthode forte :
J'ai tout bonnement repris le code de ma page d'erreur pour qu'elle ne se redirige plus vers elle même, et ça marche.
Ah les header !!!

++
 
Discussions similaires
Haut