Einen 500 internen Serverfehler unter Laravel 5+ Ubuntu 14.04 erhalten

85

Ich habe Laravel viele Male unter Windows installiert, aber es ist nie ein solches Problem aufgetreten. Dieser 500 interne Server tritt normalerweise auf, wenn Ihr "mod_rewrite" -Modul nicht eingeschaltet ist.

Unter Ubuntu 14.04 bereitet mir dieses Problem jedoch Kopfschmerzen. Ich habe rewrite_mod installiert, aber es funktioniert auch nicht. Ich habe Zugriff auf alle meine Ordner und Dateien innerhalb gegeben, dh

/ var / www / html / laravel_project

Trotzdem funktioniert es nicht. Auch .htaccess wurde vom Original in dieses geändert.

    +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Ich habe auch alle notwendigen Erweiterungen für Laravel 5+. Gibt es noch etwas, das ich nicht getan habe?

DpEN
quelle
5
Überprüfen Sie daher Ihr Fehlerprotokoll, um Details zum 500 zu sehen. Bis Sie wissen, dass dies der Fall ist, macht es keinen Sinn, überall herumzuschlagen.
Marc B
2
Warum hat es nur +FollowSymLinksoben? Sollte sein Options +FollowSymLinks.
Mike Rockétt
1
"Ich habe rewrite_mod installiert, aber ..." - und den entsprechenden Zugriff für .htaccess mit AllowOverridein Ihrer Serverkonfiguration zugelassen?
MrWhite
@ MikeRockett Ich habe kürzlich die "Optionen" entfernt, wenn der Browser leer bleibt und wenn er nicht beibehalten wird, gibt der Browser einen 500-Anforderungsfehler zurück, aber in beiden Fällen gibt der Browser 500-Fehler zurück. !
DpEN
1
@MikeRockett .. Ich habe das "/../" aus der Datei index.php entfernt und versucht und verschiedene Fehler der Dateiberechtigungen angezeigt und dann chmod und Lese- / Schreibberechtigungen festgelegt und es hat funktioniert !!! Danke für die Hilfe, Bruder !!
DpEN

Antworten:

214

Endlich das Problem überwunden

  • Es war weder die .htaccess-Datei, die das Problem darstellte, noch die index.php. Das Problem bestand darin, auf die Dateien zuzugreifen und Berechtigungen zu benötigen.

Um das Problem zu lösen, habe ich die folgenden Befehle über das Terminal ausgeführt.

sudo chmod -R 755 laravel_blog

und geben Sie dann unten ein, damit laravel eine Datei in den Speicherordner schreiben kann

chmod -R o+w laravel_blog/storage

Diese beiden Befehle lösten das Problem.

DpEN
quelle
1
Vielen Dank, ich hatte dieses Problem bei der Installation von Laravel auf einer neuen Ubuntu 14.04-Distribution auf der Google Compute Engine. Dies löste es.
Alex
1
Danke dafür. Dies behebt das Problem sowohl auf Ubuntu als auch auf Mac.
Arunabh Das
2
Dies ist ein sehr schlechter Rat, der chmod setzt alle Dateien auf + x. Ich gehe davon aus, dass Sie dies für Verzeichnisse tun wollten. In diesem Fall würden Sie find verwenden.
MightyPork
Wo soll ich cd (Verzeichnis wechseln), um diesen Befehl auszuführen?
Anastasie Laurent
1
Sie benötigen viele Cookies. Funktionierte einwandfrei mit LAMP Ubuntu 16.04 Installation von Digital Ocean.
Abhishek Saini
71

Erstellen Sie die .env-Datei und führen Sie Folgendes aus:

php artisan key:generate

Dies funktionierte für mich nach dem Ziehen eines Git-Projekts.

Führen Sie nach dem Erstellen der ENV-Datei und dem Generieren des Schlüssels den folgenden Code aus:

php artisan cache:clear 
php artisan config:clear
Gutes Leben
quelle
3
Das hat bei mir funktioniert. Machen Sie keinen Noob-Fehler, stellen Sie nach der Installation des Laravel-Projekts sicher, dass Sie .env.example in .env oder PHP Artisan Key umbenennen: Generieren wird abstürzen
Armin
OK ist das eine neue Sache? Das erste Mal auf dieses Problem gestoßen
Robert Rocha
1
php artisan cache:clear php artisan config:cleararbeitet für meinen Fall
Nurkartiko
27

Nach der Installation den folgenden Befehl ausführen

sudo chmod 755 -R laravel
chmod -R o+w laravel/storage

hier ist "laravel" der Name des Verzeichnisses, in dem laravel installiert ist

Sujendra Kumar
quelle
mit diesem Befehl stellen Sie sicher, Befehl auszuführencomposer install
Iftikhar Ali Ansari
sudo chmod -R 755 laravelDie Lage der -R ist falsch
Hïkmãt Iskandar
20

Versuchen Sie zu überprüfen, ob Sie eine .envDatei haben.

Meistens kann dieses Ding so etwas verursachen. Versuchen Sie, eine Datei zu erstellen, kopieren Sie dann alles aus .env.example, fügen Sie es in die erstellte Datei ein und benennen Sie es .env. oder jsut benenne die .env.exampleDatei einfach um .envund führe sie ausphp artisan key:generate

Lesther
quelle
diese Hilfe im ersten Versuch +
AZinkey
14

Stellen Sie sicher, dass eine .env-Datei mit einem APP_KEY im Stammverzeichnis vorhanden ist.

Was in der .env enthalten sein sollte, wurde in anderen Lösungen nicht explizit angegeben, und ich dachte, ich würde es auf den obigen Satz reduzieren.

Dies hat meinen 500er Fehler bei einer Neuinstallation von Laravel behoben.

Schritte:

  1. Erstellen Sie eine .env Datei in Root (zB touch .env)
  2. Stellen Sie sicher, dass es mindestens eine Zeile enthält: APP_KEY=
  3. Generieren Sie einen App-Schlüssel im Terminal: php artisan key:generate

Anmerkungen:

  • Meine spezielle Installation enthielt keinerlei .env (Beispiel oder anderweitig)

  • Nur eine leere .env zu haben, funktioniert nicht.

  • Eine .env-Datei mit Parametern, aber ohne APP_KEYParameter, funktioniert nicht.

Fehler?: Beim Generieren eines App-Schlüssels im Terminal wird dieser möglicherweise als erfolgreich gemeldet. Es wird jedoch kein Schlüssel in der .env- Datei abgelegt, wenn in der Datei keine bereits vorhandene APP_KEY=Zeile vorhanden ist.

Als Referenz finden Sie hier die offizielle .env mit nützlichen Basisparametern. Kopieren und einfügen, was Sie brauchen:

https://github.com/laravel/laravel/blob/master/.env.example

MarsAndBack
quelle
12

Ich habe einen ähnlichen Fehler gesehen. Ich habe die Anmeldung überprüft /var/log/apache2/error.logund eine UnexpectedValueException gefunden

Ich habe den Besitzer in meinen Apache-Benutzer des Speicherordners unter dem Projektverzeichnis geändert.

sudo chown -R www-data:www-data ./storage

In meinem Fall ist der Eigentümer des Apache2-Prozesses. www-dataÄndern Sie dies in Ihren. Dies befindet sich in der Apache2-Konfigurationsdatei. Hoffe das ist nützlich für dich.

Snriud
quelle
12

Ich habe mit diesem Befehl Folgendes behoben:

   rm -rf app/storage/logs/laravel.logs
   chmod -R 777 app/storage,
   php artisan cache:clear,
   php artisan dump-autoload OR composer dump-autoload

Dann starten Sie einen Server über XAMPP oder einen anderen neu und das sollte funktionieren.

Atdhe Kurteshi
quelle
3
777 ist ein sehr schlechter Befehl und ermöglicht jedem im Internet den WRITE-Zugriff. 644 ist ratsamer.
Zac Grierson
9

Möge eine andere Lösung für dieses Problem:

Installieren Sie die erforderlichen Pakete, indem Sie den Composer-Befehl im Stammverzeichnis des Projekts ausführen:

sudo composer install

AKTUALISIEREN:

  • Sie sollten diesen Befehl nicht auf einem Produktionsserver ausführen, aber einige Probleme mit Composer können damit in lokalen Umgebungen behoben werden.

BEARBEITEN:

Christos Papoulas
quelle
1
Was zum Teufel ist das? Weißt du eigentlich, was du antwortest?
Jimmy Obonyo Abor
3
@ JimmyObonyoAbor Eigentlich funktioniert das. Laut den Protokollen lag der 500 daran, dass einige Dateien in / vendor fehlten. Wie behebt man das? Durch Ausführen von Composer Install / Update. Vielen Dank und positive Bewertung, Christos Papoulas
Tomsihap
5
Ich glaube, dass das Ausführen dieses Befehls mit sudo eine potenzielle Sicherheitslücke darstellt
Shay
5

Ich hatte PHP 7.0 und PHP 7.1 installiert und ich habe PHP 7.1 in der Befehlszeile verwendet und PHP 7.0 wurde in Apache aktiviert. Dieses Chaos kann Probleme verursachen, wenn Sie Laravel Framework und localhost Apache2 mit Laravel verwenden.

Überprüfen Sie zuerst Ihre Composer-Datei, um Ihre PHP-Version zu sehen.

"php": "^7.1.3",
"laravel/framework": "5.6.*",

Überprüfen Sie Ihre aktuelle PHP-Version in der Befehlszeile

php -v

Überprüfen Sie Ihre derzeit auf Apache aktivierte PHP-Version. Ich habe den Browser verwendet.

http://localhost

Wenn dies nicht der Fall ist, deaktivieren Sie die aktuelle Version und aktivieren Sie die neueste.

sudo a2dismod php7.2

sudo a2enmod php7.1

sudo service apache2 restart

Danach ändern Sie die Ordnerberechtigungen

sudo chmod 755 -R blog

für Speicherordner

chmod -R o+w blog/storage
Saulo Campos
quelle
5

Ein häufiges Problem bei der Verwendung von Git:

Laravel's .gitignore ignores the .env file which when missing generates this error

Dies wurde behoben, indem manuell eine .env-Datei auf dem Server hinzugefügt oder über FTP hochgeladen wurde

Maroun Melhem
quelle
4

Manchmal gibt es ein Problem mit der PHP-Version. Wir müssen die PHP-Version vom Server ändern. Schreiben Sie einfach die folgende Zeichenfolge in die .htaccess- Datei:

AddHandler application/x-httpd-php5 .php
Riyan Sheikh
quelle
3

Erlauben Sie zunächst alle Berechtigungen für Ihren Projektordner (beispielsweise Laravel genannt), für den Unterordner "Speicher" und seine Unterordner "Protokolle" und für den Unterordner "Vendor" (Laravel / Speicher, Laravel / Speicher / Protokolle und Laravel / Vendor).

Überprüfen Sie dann, ob Ihre .env-Datei vorhanden ist. Andernfalls können Sie Folgendes ausführen:

$ mv .env.example .env

um Ihr eingebautes .env.Beispiel in das erforderliche .env umzubenennen.

Andernfalls aktivieren Sie den Debug-Modus - öffnen Sie .env und stellen Sie ein

APP_DEBUG=true

und öffne laravel / config / app.php und ändere

'debug' => env('APP_DEBUG', false), 

zu

'debug' => env('APP_DEBUG', true),

So können Sie herausfinden, was der Grund für Ihren Fehler ist.

tsveti_iko
quelle
4
Es gibt keinen Grund, warum Sie config / app.php so bearbeiten sollten. Das würde den gesamten Zweck der .env-Datei negieren.
Nathan
Beim Ausführen meiner Laravel-App auf meinem Testserver (im Produktionsmodus) wurden interne Servicefehler angezeigt. Durch Setzen von APP_DEBUG = true konnte ich die Details des Fehlers anzeigen, um das Problem zu finden und zu beheben.
Debbie V
3

Führen Sie diese beiden Befehle in dem Verzeichnis aus, in dem Laravel installiert ist:

sudo chmod 755 -R DIRECTORY_NAME
chmod -R o+w DIRECTORY_NAME/storage

Leeren Sie dann den Cache und sichern Sie das automatische Laden:

php artisan cache:clear
composer dump-autoload
Ayman
quelle
3

Ich habe dieses Problem viele Male konfrontiert. Versuchen Sie einen dieser Schritte, es hat mir sehr geholfen. Vielleicht hilft es dir auch.

  1. Überprüfen Sie zunächst Ihre Dateiberechtigungen.
  2. So beheben Sie Dateiberechtigungen: sudo chmod 755 -R your_project
  3. Dann chmod -R o + w your_project / storage , um eine Datei in den Speicherordner zu schreiben.
  4. PHP Artisan Cache: Clear
    Composer Dump-Autoload
  5. PHP Artisan Key: generieren
  6. Überprüfen Sie dann die Serveranforderungen gemäß der Laravel-Anforderung.
  7. Oft hast du diesen Fehler wegen der PHP-Version bekommen . Versuchen Sie, Ihre PHP-Version in cpanel zu ändern.
  8. Konfigurieren Sie dann Ihre .htaccess- Datei ordnungsgemäß
Anand Mainali
quelle
3

Ich habe alle Kommentare und Vorschläge gelesen. 500 - HTTP ERROR CODE repräsentiert einen internen Serverfehler.

Gründe für diesen Fehler:

  • Es gibt hauptsächlich Gründe für Berechtigungsprobleme
  • Umgebungsvariablen nicht gefunden oder .envDatei nicht in Ihrem Stammverzeichnis gefunden
  • Problem mit PHP-Erweiterungen
  • Datenbankproblem

Fix:

  • Legen Sie die richtigen Berechtigungen fest:
    • Führen Sie diese Befehle aus (Ubuntu / Debian)
find /path/to/your/root/dir/ -type f -exec chmod 644 {} \;
find /path/to/your/root/dir/ -type d -exec chmod 755 {} \;

chown -R www-data:www-data /path/to/your/root/dir/

chgrp -R www-data storage bootstrap/cache
chmod -R ug+rwx storage bootstrap/cache
  • Wenn keine ENV- Datei vorhanden ist, erstellen Sie eine von, touch .envfügen Sie Ihre Umgebungsvariablen ein und führen Sie sie aus
   php artisan key:generate
   php artisan cache:clear
   php artisan config:clear
   composer dump-autoload
  • Überprüfen Sie Ihre php.ini-Datei und kommentieren Sie die benötigten Erweiterungen aus (In einigen Fällen müssen Sie die Erweiterung installieren, indem Sie diesen Befehl ausführen apt-get install php7.2-[extension-name]
  • Überprüfen Sie Ihre Datenbankanmeldeinformationen und -werte in der .envDatei. Gewähren Sie dem Datenbankbenutzer Berechtigungen für diese Datenbank.

Dies sind einige häufige Probleme, mit denen Sie wahrscheinlich konfrontiert werden, wenn Sie Ihre Laravel-App bereitstellen. Wenn Sie alle diese Befehle erhalten, sollten Sie ein Skript erstellen, das Ihre Zeit spart.

Smit Patel
quelle
2

Wenn Sie Vagabund verwenden, versuchen Sie Folgendes:

Entfernen Sie zuerst config.php in current / vendor.

Führen Sie diesen Befehl aus:

php artisan config:clear
php artisan clear-compiled
php artisan optimize

NICHT LAUFEN PHP Artisan Config: Cache.

Ich hoffe das hilft.

Hãnh Nguyễn
quelle
1

Führen Sie diese beiden Befehle auf der Wurzel von Laravel aus

find * -type d -print0 | xargs -0 chmod 0755 # für Verzeichnisse

finden . -Typ f -print0 | xargs -0 chmod 0644 # für Dateien

Davinder Singh
quelle
1

Ich habe ein ähnliches Problem mit einem Share-Host. Ich hatte 500 Fehler. Ich habe es gerade behoben, indem ich die Laravel-Version und die PHP-Version überprüft habe. Der Fehler war, dass Laravel 5.6 nicht unter PHP 7.0.x läuft. Sobald ich das weiß, konfiguriere ich das Projekt einfach auf Laravel 5.5 neu, das mit PHP 7.0.x kompatibel ist. Jetzt ist alles in Ordnung. Ein weiterer Grund, warum ich manchmal Probleme habe, ist das FTP. Ich bekomme beschädigte Dateien und muss das Projekt mehr als einmal hochladen. Hoffe diese Hilfe in der Zukunft Ich habe nicht so viele Informationen in diesem Thema gefunden.

Josean Maya
quelle
1

Für diejenigen unter Ihnen, die mich mögen, sind nach dem Ausprobieren aller anderen Antworten immer noch Fehler aufgetreten:

Überprüfen Sie die Version von PHP Apache verwendet, die neueste Laravel funktioniert nur mit PHP7.1. Also musst du:

sudo a2dismod php[yourversion]
sudo a2enmod php7.1
sudo systemctl restart apache2

hoffe das hilft

Ika Tobihi
quelle
1

Wenn es auf einem Live-Server ist, versuchen Sie dies

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews -Indexes
</IfModule>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /


# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Stellen Sie dann auch sicher, dass die PHP-Version in Ihrer composer.json mit der Ihres Servers übereinstimmt.

Überprüfen Sie Ihre PHP-Version in Ihrem Terminal mit php -v

Der Milliardär
quelle
1

Stellen Sie sicher, dass Sie composer updateauf Ihrer Serverinstanz ausgeführt haben.

Usama Munir
quelle
1

Erstens, wenn sich in Ihrem Laravel-Repository keine .env-Datei befindet. Kopieren Sie die .env.example-Datei, fügen Sie sie ein und benennen Sie sie in .env um. Öffnen Sie dann die ENV-Datei und geben Sie im Datenbankteil Ihre Datenbankbeschreibung an. Ausführen: PHP Artisan Schlüssel: PHP Artisan Cache generieren: PHP Artisan Konfiguration löschen: Cache PHP Artisan Konfiguration: Composer löschen Dump-Autoload PHP Artisan Serve

Hedayatullah Sarwary
quelle
0

Nach den Protokollen:

[06-Feb-2016 22:38:48 Europe/Berlin] PHP Warning:  require(/Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in /Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/autoload.php on line 17
[06-Feb-2016 22:38:48 Europe/Berlin] PHP Fatal error:  require(): Failed opening required '/Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/../vendor/autoload.php' (include_path='.:/Applications/MAMP/bin/php/php7.0.0/lib/php') in /Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/autoload.php on line 17
[06-Feb-2016 22:43:37 Europe/Berlin] PHP Warning:  require(/Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in /Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/autoload.php on line 17
[06-Feb-2016 22:43:37 Europe/Berlin] PHP Fatal error:  require(): Failed opening required '/Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/../vendor/autoload.php' (include_path='.:/Applications/MAMP/bin/php/php7.0.0/lib/php') in /Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/autoload.php on line 17

Es gibt einige Fehler beim Öffnen von Dateien im Ordner / vendor.

Durch die Installation und Aktualisierung über Composer konnte ich das Problem endlich lösen.

sudo composer install
sudo composer update
Tomsihap
quelle
0

Stellen Sie sicher, dass der Speicherordner mit Schreibvoraussetzung (chmod o + w) für mich wie ein Zauber funktioniert.

user3619249
quelle
0

Da kein Recht besteht, das Verzeichnis des Protokolls zu schreiben.
chmod 755 Speicher -R

George Peter
quelle
Was unterscheidet sich von dieser Antwort ?
Athafoud
0

Ich war mit diesem Problem konfrontiert und habe es durch ein Upgrade meiner PHP-Version in Apache auf 5.6.x behoben

Mahmoud Niypoo
quelle
0

Ändern Sie die Berechtigung für den Webordner nur über diesen Befehl:

sudo chmod 755 -R your_folder

Muhammad Shoaib
quelle
0

Ich habe gerade den folgenden Befehl ausgeführt:

php artisan passport:install

Ich habe Passport verwendet, um meine Anwendung vollständig basierend auf APIs und Vue.js auszuführen. Laravel hat gut funktioniert, aber jedes Mal, wenn ich versuchte, mich über meine API anzumelden, bekam ich den Fehler. Nachdem der Befehl ausgeführt und die client_id und client_secret in meinen Laravel-Dateien aktualisiert und die neuen Updates auf den Live-Server übertragen wurden, wurde das Problem behoben. In meinem Benutzermodell habe ich ein Skript wie folgt:

public function generateToken($request)
{
    $http = new \GuzzleHttp\Client();
    $response = $http->post(URL::to('/').'/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => '6',
            'client_secret' => 'x3yhgWVqF8sSaMev4JI3yvsVxfbgkfRJmqzlpiMQ',
            'username' => $this->email,
            'password' => $request->input('password'),
            'scope' => '',
        ],
    ]);
    //  Lets get an array instead of a stdObject so that we can return without errors
    $response = json_decode($response->getBody(), true);

    return oq_api_notify([
                'auth' => $response,                                        //  API ACCESS TOKEN
                'user' => $this->load(['settings'])->toArray(),
            ], 201);
}

Ich habe gerade die client_id und client_secret aktualisiert und erst dann gespeichert. Da der Passpass-Befehl Ihnen zwei Client-Schlüssel gibt:

1) Client mit persönlichem Zugriff (client_id & client_secret)

2) Client zur Kennwortgewährung (client_id & client_secret)

Ich habe den Password Grant-Client verwendet. Hoffe das hilft jemandem da draußen :)

Julian Tabona
quelle