1

Salut ont créé un error.php pour joomla pour rediriger les erreurs 404 etc. à un article de joomla. Le code ci-dessous fonctionne pour une erreur 404, mais un 403 renvoie une page vierge. Je peux naviguer vers la page directement en dehors de mon script, donc il doit s'agir de mon code ou de la façon dont il est interactif dans son environnement.Quel est le problème avec cette erreur 403 rediriger

Merci Stephen

defined('_JEXEC') or die('Restricted access'); 
if ($this->error->code == 404) 
{ 
Header("HTTP/1.1 404 Not found"); 
header("Location: http://www.queensberry.com/misc/filenotfound/"); 
} else if ($this->error->code == 403) { 
Header("HTTP/1.1 403 Restricted Content"); 
Header("Location: http://www.queensberry.com/restrictedcontent/"); 
} else { 
echo "hello world error code = " . $this->error->code; 
} 
?> 
+0

L'avez-vous essayé avec une en-tête minuscule() pour votre redirection 403? – Pat

+2

les fonctions sont insensible à la casse en PHP –

Répondre

4

J'apprécie l'aide de tout le monde, mais les réponses m'ont envoyé dans une direction différente de ce que j'espérais. Je voulais continuer à utiliser le fichier error.php de Joomla comme destination pour les erreurs Joomla mais au lieu de formater la page pour qu'elle ressemble à une partie du site que je voulais rediriger vers le contenu Joomla. En fin de compte, j'ai trouvé ce dont j'avais besoin était une sortie; dans mon script. Donc, voici le error.php comme il fonctionne maintenant.

defined('_JEXEC') or die('Restricted access'); 
if ($this->error->code == 404) 
{ 
Header("HTTP/1.1 404 Not found"); 
header("Location: http://www.queensberry.com/misc/filenotfound/"); 
exit; 
} else if ($this->error->code == 403) { 
Header("HTTP/1.1 403 Restricted Content"); 
Header("Location: http://www.queensberry.com/restrictedcontent/"); 
exit; 
} else { 
echo "hello world error code = " . $this->error->code; 
} 
?> 
6

Plutôt que d'utiliser Header("Loaction:...") vous devriez être rendu à la page « contenu restreint » avec un include() ou quelque puis sortir. Le navigateur ne suit pas l'en-tête Location après avoir reçu un 403 le plus probable.

+0

Merci Steven et gnarf. gnarf dites-vous qu'au lieu d'attendre d'être rebondi de la page restreinte comme je suis maintenant, je devrais éditer cette page pour sortir mon message d'erreur ou contrôler la redirection à partir de là> Je ne suis pas sûre de comprendre complètement. Bravo Stephen –

+0

J'utilise un framework, donc mon 404/403 est un peu différent, mais toute mon expérience me dit que votre problème disparaitrait si vous aviez juste une sorte de fichier '403.php' que vous pourriez inclure ('403.php'); et il cracherait juste la page d'erreur directement. Je pense que c'est le comportement attendu du serveur pour afficher une page d'erreur en donnant un code d'erreur. – gnarf

1

L'en-tête ("Location:") provoque une redirection standard vers une nouvelle page. L'erreur 403 ne sera envoyée que si elle est sur la page rendue par PHP. Donc, vous essayez effectivement de dire (avec le code que vous avez posté) "La page actuelle entraîne une erreur 403" mais ensuite vous redirigez vers une page entièrement différente. Ajouter l'en-tête 403 à http://www.queensberry.com/restrictedcontent/ et vous devriez être bon. Vous devez également faire la même chose avec l'en-tête 404.

1

Si (HTTP/1.1 403), puis Web Browser (Firefox, IE, Chrome, ...) ignorera tout

Lieu: (bla bla bla) est.

Ne croyez pas? Par exemple: vous savez comment produire le code d'erreur 403 depuis votre site Joomla. (je veux dire joomla_site/Bla-Bla-Bla :: qui produisent le code d'erreur 403)

Demandons si Web Server donne (en fonction de votre fichier error.php) comme suit:

... HTTP/1.1 403 contenu restreint Lieu: http://www.queensberry.com/restrictedcontent/ ...

Ceux-ci sont à droite en fonction de votre fichier error.php (je veux dire votre fichier error.php fonctionne comme vous le souhaitez)

- Vérifiez avec telnet 80

Essayons

c: \ your_host telnet: 80

GET Bla-Bla-Bla HTTP/1.1

Hôte: joomla_site

- Espérons que cela répond à votre curiosité :-)

je le répète encore une fois:

Si (HTTP/1.1 403), puis Navigateur Web (Firefox, IE, Chrome, ...) ignorera quel que soit

Emplacement: (bla bla bla) est.