2016-04-05 6 views
6

Auf meiner Website möchte ich, dass alle Fehler 500 Fehler zu/500.html umgeleitet werden. Derzeit werden einige der Seiten mit GET http://localhost/ [HTTP/1.0 500 Internal Server Error 1ms] in den Entwicklertools angezeigt. Ich habe versucht, dies durch Bearbeiten /etc/apache2/sites-enabled/000-default.conf zu implementieren. Die Datei sieht wie folgt aus:PHP so einstellen, dass es bei Fehler 500s immer umleitet

<VirtualHost *:80> 
# The ServerName directive sets the request scheme, hostname and port that 
# the server uses to identify itself. This is used when creating 
# redirection URLs. In the context of virtual hosts, the ServerName 
# specifies what hostname must appear in the request's Host: header to 
# match this virtual host. For the default virtual host (this file) this 
# value is not decisive as it is used as a last resort host regardless. 
# However, you must set it for any further virtual host explicitly. 
#ServerName www.example.com 

ServerAdmin [email protected] 
DocumentRoot /var/www/html 

# Available loglevels: trace8, ..., trace1, debug, info, notice, warn, 
# error, crit, alert, emerg. 
# It is also possible to configure the loglevel for particular 
# modules, e.g. 
#LogLevel info ssl:warn 

ErrorLog ${APACHE_LOG_DIR}/error.log 
CustomLog ${APACHE_LOG_DIR}/access.log combined 

# For most configuration files from conf-available/, which are 
# enabled or disabled at a global level, it is possible to 
# include a line for only one particular virtual host. For example the 
# following line enables the CGI configuration for this host only 
# after it has been globally disabled with "a2disconf". 
#Include conf-available/serve-cgi-bin.conf 
    ErrorDocument 500 /500.html 
</VirtualHost> 
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet 

Ich habe auch versucht die Bearbeitung apache2.conf und .htaccess aber ich bekomme das gleiche Ergebnis.

P. S: Ich habe versucht, Apache Neustart jedes Mal!

+2

Haben Sie versucht, etwas wie 'ErrorDocument 500 http: // google.com' zu überprüfen, ob das' ErrorDocument' funktioniert? Stock Response: Haben Sie die Apache error.log überprüft? :) – Egg

Antwort

4

Wenn Sie versuchen, 500 Fehler von PHP in Apache mit mod_php mit SetHandler abzufangen (eine sehr häufige Möglichkeit), dann ist die Antwort, dass Sie nicht können. Soweit ich weiß, ist dies kein unterstütztes Feature.

Es gibt jedoch Möglichkeiten wie PHP über seine FastCGI-Schnittstelle (PHP-FPM) und das Apache proxy Modul zu verwenden, um zu erreichen, was Sie benötigen.

Zuerst müssen Sie sicherstellen, dass mod_proxy und proxy_fcgi_module auf Ihrem Server und aktiviert in der Config Apache installiert sind wie folgt:

LoadModule proxy_module modules/mod_proxy.so 
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so 

Stellen Sie außerdem sicher, dass PHP-FPM installiert ist und als Dienst ausgeführt wird, der Standard-Port ist 9000.

Ersetzen Sie dann Ihre Apache-PHP-Konfiguration (möglicherweise in /etc/httpd/conf.d/php.conf) mit den folgenden.

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$1 
DirectoryIndex /index.php index.php 

Dies bedeutet, dass Sie jetzt das Apache Proxy-Modul verwenden, um Datenverkehr an PHP zu senden. Es ist möglich, Apache anzuweisen, Fehlerantworten vom Proxy-Modul abzufangen und benutzerdefinierte Fehlerbehandlungsroutinen mit folgenden Angaben in Ihrem Abschnitt VirtualHost zu verwenden.

ProxyErrorOverride On 
ErrorDocument 500 /500.html 
+0

Leider hat Ihre Lösung nicht funktioniert, aber ich bekomme jetzt eine Fullscreen 500 Fehlermeldung von meinem Webbrowser. Ich habe meine Schritte überprüft und bekomme keine Fehler in meinem Apache-Fehlerprotokoll. (Obwohl grob gesagt bekomme ich einen Fehler 500, weil ich teste!) –

+0

Um zu klären - der Fehler 500 ist absichtlich zum Testen und gültige PHP-Inhalt funktioniert normal? Das Problem mit der Lösung ist, dass Sie immer noch keine benutzerdefinierte 500 Fehlerseite erhalten? –

+0

Ja, genau. + Steve E. –

0

ich diesen Code finden Sie hier:

<VirtualHost *:80> 
ServerAdmin [email protected] 
DocumentRoot /var/www/html 
ErrorLog ${APACHE_LOG_DIR}/error.log 
CustomLog ${APACHE_LOG_DIR}/access.log combined 
ErrorDocument 500 /custom_500.html 
</VirtualHost> 

dann die benutzerdefinierten Seiten gehen hier:/var/www/html und die Datei, die Sie bearbeiten müssen, ist diese oder ähnlich:

/etc/apache2/sites-enabled/000-default.conf 

auch diese 2 Mods aktivieren, und dann auf Syntaxfehler überprüfen und starten Sie Apache

sudo a2enmod proxy 
sudo a2enmod proxy_http 
sudo apache2ctl configtest 
sudo service apache2 restart 

mir sagen, ob dies für Ihren Server funktioniert, weil auf meinem Server nach einigen Versuchen, es funktionierte

+0

Leider funktioniert das nicht! + easy –

+0

Entschuldigung, wenn ich dich einige Zeit verschwendete, hoffe ich, dass jemand anderes dir hilft, dieses Problem zu lösen – eazy

+0

Es ist ok! Zumindest hast du es versucht! + easy –

1

Benutzerdefinierte Fehlerdokumente die ErrorDocument Direktive konfiguriert sind, die in der globalen, Virtualhost oder Verzeichniskontext verwendet werden. Es kann in .htaccess Dateien verwendet werden, wenn AllowOverride auf FileInfo festgelegt ist.

ErrorDocument 500 "Sorry, our script crashed. Oh dear" 
ErrorDocument 500 /errors/not_found.html 
ErrorDocument 500 http://error.example.com/server_error.html 

Die Syntax der Anweisung Errordocument ist:

ErrorDocument <3-digit-code> <action> 

, wo die Aktion wird wie behandelt werden:

  1. Eine lokale URL umleiten zu (wenn die Aktion mit einem beginnt "/").
  2. Eine externe URL zum Weiterleiten an (wenn die Aktion eine gültige URL ist).
  3. Text, der angezeigt werden soll (wenn keiner der oben genannten Punkte angezeigt wird). Der Text muss in Anführungszeichen (") eingeschlossen werden, wenn er aus mehr als einem Wort besteht. Bei der Umleitung zu einer lokalen URL werden zusätzliche Umgebungsvariablen festgelegt, so dass die Antwort weiter angepasst werden kann. Sie werden nicht an externe gesendet URLs.

Apache documentation

beachten Sie, dass der Apache für die innerhalb der Website Server-root befindet sich 404-Seite aussieht. Was bedeutet, dass, wenn Sie legen Sie die neue Fehlerseite in einem tieferen Unterverzeichnis, Sie muss das einbeziehen die Linie.

+0

Das hat leider nicht funktioniert ... + Tomasz Turkowski –

+0

@I'monstackexchange bekommst du noch die Standard 500 Fehlerseite von /500.html? – Tomasz

+0

Ja. + Tomasz Turkowski –

Verwandte Themen