1

Hallo habe ich eine error.php für joomla um 404 Fehler usw. zu einem Joomla-Artikel umleiten erstellt. Der folgende Code funktioniert für einen 404-Fehler, aber ein 403 gibt eine leere Seite zurück. Ich kann direkt außerhalb meines Skripts zur Seite navigieren, so dass es entweder mein Code sein muss oder wie er in seiner Umgebung interaktiv ist.Was ist los mit diesem 403 Fehler Redirect

Dank 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

Haben Sie es mit einem Kleinbuchstaben header() für Ihre 403 Redirect versucht? – Pat

+2

Funktionen sind case insensitive in PHP –

Antwort

4

Ich schätze die Hilfe aller, aber die Antworten schickten mich in eine andere Richtung als ich hoffte. Ich wollte die Joomla-Datei error.php weiterhin als Ziel für Joomla-Fehler verwenden, aber anstatt die Seite so zu formatieren, dass sie Teil der Seite war, die ich in Joomla-Inhalte umleiten wollte.

Am Ende fand ich, was ich brauchte, war ein Ausgang; in meinem Skript. Also hier ist die error.php wie es jetzt funktioniert.

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

Anstatt Header("Loaction:...") verwenden, sollten Sie mit einem include() oder so und dann verlässt Rendern der „Parental“ Seite sein. Der Browser folgt nicht dem Location-Header, nachdem er am wahrscheinlichsten 403 empfangen hat.

+0

Danke Steven und gnarf. gnarf sagen Sie, dass ich anstelle von Warten auf die eingeschränkte Seite wie ich jetzt bin, sollte ich diese Seite um meine Fehlermeldung bearbeiten oder steuern Sie die Weiterleitung von dort> Nicht sicher, dass ich vollständig verstehe. Prost Stephen –

+0

Ich benutze ein Framework, also ist meine 404/403 ein wenig anders, aber alle meine Erfahrung sagt mir Ihr Problem würde weggehen, wenn Sie nur eine Art '403.php' Datei, die Sie einschließen könnten ('403.php'); und es würde die Fehlerseite direkt ausspucken. Ich denke, das ist das erwartete Verhalten des Servers, eine Fehlerseite anzuzeigen, wenn er einen Fehlercode gibt. – gnarf

1

Der Header ("Location:") verursacht eine Standardumleitung auf eine neue Seite. Der Fehler 403 wird nur gesendet, wenn er sich auf der von PHP gerenderten Seite befindet. Du versuchst effektiv zu sagen (mit dem Code, den du gepostet hast): "Die aktuelle Seite führt zu einem Fehler 403", aber dann wirst du auf eine komplett andere Seite umgeleitet. Fügen Sie den 403 Header zu http://www.queensberry.com/restrictedcontent/ hinzu und Sie sollten gut sein. Sie müssen das Gleiche auch mit dem Header 404 tun.

1

Wenn (HTTP/1.1 403) dann Webbrowser (Firefox, IE, Chrome, ...) wird was

Ort ignorieren: (bla bla bla) ist.

Glauben Sie nicht?

Angenommen: Sie wissen, wie Sie den Fehlercode 403 von Ihrer Joomla-Site erzeugen können. (ich meine joomla_site/bla-bla-bla :: der Fehlercode 403 erzeugen)

Lassen Sie sich fragen, ob Web Server gibt (basierend auf Ihrer error.php Datei) wie folgt:

... HTTP/1.1 403 Restricted Inhalt Ort: http://www.queensberry.com/restrictedcontent/ ...

Diejenigen Recht basieren auf Ihrer error.php Datei (ich meine Ihre error.php Datei funktioniert, wie Sie möchten)

- Überprüfen Sie mit telnet 80

des

c Lassen Sie versuchen: \ telnet ihr_host: 80

GET bla-bla-bla HTTP/1.1

Host: joomla_site

- Hoffe, dass dies Ihre Neugier erfüllen :-)

ich wiederhole es noch einmal:

If (HTTP/1.1 403) dann Webbrowser (Firefox, IE, Chrome, ...) wird ignoriert was auch immer

Ort: (bla bla bla) ist.