Ottenere un errore interno del server 500 su Laravel 5+ Ubuntu 14.04


88

Ho installato Laravel molte volte su sistema operativo Windows ma non si è mai verificato questo tipo di problema. Questo server interno 500 di solito si verifica quando il modulo "mod_rewrite" non è attivato.

Tuttavia, su Ubuntu 14.04 questo problema mi dà il mal di testa. Ho installato rewrite_mod ma non funziona. Ho dato accesso a tutte le mie cartelle e file all'interno di ie

/ var / www / html / laravel_project

Tuttavia non funziona. Cambiato anche .htaccess da originale a questo.

    +FollowSymLinks
RewriteEngine On

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

Ho anche tutte le estensioni necessarie per Laravel 5+. È rimasto qualcosa che non ho fatto?


5
quindi controlla il registro degli errori per vedere i dettagli sulla 500. finché non sai di averlo, non ha senso agitarsi dappertutto.
Marc B

2
Perché ha solo +FollowSymLinksin alto? Dovrebbe essere Options +FollowSymLinks.
Mike Rockétt

1
"Ho installato rewrite_mod ma ..." - e ho consentito l'accesso appropriato per .htaccess con AllowOverridenella configurazione del tuo server?
MrWhite

@MikeRockett ho recentemente rimosso le "Opzioni" quando la tengo il browser diventa bianco e quando non la tengo il browser restituisce un errore di richiesta 500 ma in entrambi i casi il browser restituisce 500 errore. !
DpEN

1
@MikeRockett .. Ho rimosso "/../" dal file index.php e ho provato e mostrato diversi errori di permessi del file e poi chmod e impostato i permessi di lettura / scrittura e ha funzionato !!! Grazie per l'aiuto fratello !!
DpEN

Risposte:


215

Finalmente ha superato il problema

  • Non era il file .htaccess il problema né index.php. Il problema riguardava l'accesso ai file e la richiesta di autorizzazioni.

Per risolvere il problema ho eseguito i seguenti comandi tramite terminale.

sudo chmod -R 755 laravel_blog

quindi digita di seguito per consentire a laravel di scrivere il file nella cartella di archiviazione

chmod -R o+w laravel_blog/storage

Questi due comandi hanno risolto il problema.


1
Grazie, ho avuto questo problema durante l'installazione di laravel su una nuova distribuzione Ubuntu 14.04 su Google Compute Engine, questo lo ha risolto.
Alex

1
Grazie per questo. Questo ha risolto il problema sia su Ubuntu che su Mac.
Arunabh Das

2
questo è un pessimo consiglio, chmod imposta tutti i file su + x. Presumo che volessi farlo per le directory, nel qual caso dovresti usare find.
MightyPork

dove dovrei cd (cambiare directory) per eseguire quel comando?
Anastasie Laurent

1
Hai bisogno di molti biscotti. Ha funzionato bene su LAMP Ubuntu 16.04 Installazione di Digital Ocean.
Abhishek Saini

75

Crea il file .env ed esegui anche:

php artisan key:generate

Questo ha funzionato per me dopo aver tirato fuori un progetto git.

Dopo aver creato il file .env e generato la chiave, esegui il codice seguente:

php artisan cache:clear 
php artisan config:clear

3
Questo ha funzionato per me. Non commettere errori da noob, dopo aver installato il progetto laravel assicurati di rinominare .env.example in .env o php artisan key: generate andrà in crash
Armin

OK è una cosa nuova? La prima volta che si verifica questo problema
Robert Rocha

1
php artisan cache:clear php artisan config:clearsta lavorando per il mio caso
Nurkartiko

27

Dopo l'installazione esegui sotto il comando

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

qui "laravel" è il nome della directory in cui è installato laravel


con questo comando assicurati di eseguire il comandocomposer install
Iftikhar Ali Ansari

sudo chmod -R 755 laravella posizione della -R è sbagliata
Hïkmãt Iskandar

22

Prova a controllare se hai .envfile.

Per lo più questa cosa può causare qualcosa del genere. Prova a creare un file, quindi copia tutto da .env.example, incollalo nel file creato e assegnagli un nome .env. o semplicemente rinomina il .env.examplefile in .enved eseguiphp artisan key:generate


questo aiuto nel primo tentativo +
AZinkey

15

Assicurati che in root sia presente un file .env contenente APP_KEY .

Quello che dovrebbe essere nel .env non è stato esplicitamente dichiarato in altre soluzioni e ho pensato di ridurlo alla frase sopra.

Questo ha risolto il mio errore 500 su una nuova installazione di Laravel.

Passaggi:

  1. Crea un file .env in root (ad esempio touch .env)
  2. Assicurati che contenga almeno una riga: APP_KEY=
  3. Genera una chiave dell'app nel terminale: php artisan key:generate

Appunti:

  • La mia particolare installazione non includeva alcun .env (esempio o altro)

  • Avere semplicemente un .env vuoto non funziona.

  • Un .env contenente parametri, ma nessun APP_KEYparametro, non funziona.

Bug ?: Quando si genera una chiave dell'app nel terminale, potrebbe essere segnalato come riuscito, tuttavia nessuna chiave verrà effettivamente inserita nel .env se il file non ha preesistenteAPP_KEY= riga .

Come riferimento, ecco il .env ufficiale con utili parametri di base. Copia-incolla ciò di cui hai bisogno:

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


12

Ho riscontrato un errore simile. Ho controllato il login /var/log/apache2/error.loge ho trovato un'eccezione UnexpectedValueException

Ho cambiato il proprietario con il mio utente Apache della cartella di archiviazione nella directory del progetto.

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

Nel mio caso il proprietario del processo apache2 è www-data, quindi cambialo con il tuo, questo può essere trovato nel file di configurazione di apache2. Spero che questo ti sia utile.


12

Ho risolto con questo comando:

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

Quindi riavviare un server eather XAMPP o un altro e dovrebbe funzionare.


3
777 è un pessimo comando e darà accesso in SCRITTURA a chiunque su Internet. 644 è più consigliabile.
Zac Grierson

9

Possa un'altra soluzione a questo problema:

Installa i pacchetti richiesti eseguendo il comando composer dalla radice del progetto:

sudo composer install

AGGIORNARE:

  • Non dovresti eseguire questo comando su un server di produzione, ma alcuni problemi con il compositore possono essere risolti con questo su envs locali.

MODIFICARE:


1
Che diavolo è questo, sai davvero cosa stai rispondendo!
Jimmy Obonyo Abor

3
@JimmyObonyoAbor In realtà funziona. Secondo i log, il 500 era perché mancavano alcuni file in / vendor. Come lo risolvi? Eseguendo l'installazione / aggiornamento del compositore. Grazie e
voto positivo

5
Credo che eseguire quel comando con sudo sia un potenziale buco di sicurezza
Shay

5

Avevo PHP 7.0 e PHP 7.1 installati e stavo usando PHP 7.1 sulla riga di comando e PHP 7.0 era abilitato su Apache, quel disordine può portare problemi quando si utilizza Laravel Framework e localhost Apache2 con laravel.

Controlla prima il file del compositore per vedere la tua versione PHP.

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

Controlla la tua versione attuale di php sulla riga di comando

php -v

Controlla la tua versione php attualmente abilitata su Apache, l'ho fatto usando il browser.

http://localhost

Se non è lo stesso, disabilitare la versione corrente e abilitare quella più recente.

sudo a2dismod php7.2

sudo a2enmod php7.1

sudo service apache2 restart

Dopo di che cambia le autorizzazioni della cartella

sudo chmod 755 -R blog

per la cartella di archiviazione

chmod -R o+w blog/storage

5

Un problema frequente quando si utilizza git:

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

Risolto questo problema aggiungendo manualmente un file .env sul server o caricandolo tramite FTP


4

A volte c'è un problema con la versione php. Dobbiamo cambiare la versione di php dal server. Basta annotare sotto la stringa nel file .htaccess :

AddHandler application/x-httpd-php5 .php

4

Ho letto tutti i commenti e suggerimenti. 500 - IL CODICE DI ERRORE HTTP rappresenta un errore interno del server.

Motivi di questo errore:

  • Ci sono principalmente cause dovute a problemi di autorizzazione
  • Variabili di ambiente non trovate o .envfile non trovato nella directory principale
  • Problema con le estensioni PHP
  • Problema del database

Correzione:

  • Imposta le autorizzazioni corrette:
    • Esegui questi comandi (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
  • Se il file .env non esiste, creane uno touch .enve incolla le variabili di ambiente, quindi esegui
   php artisan key:generate
   php artisan cache:clear
   php artisan config:clear
   composer dump-autoload
  • Controlla il tuo file php.ini e rimuovi il commento dalle estensioni che ti servono (in alcuni casi devi installare l'estensione eseguendo questo comando apt-get install php7.2-[extension-name]
  • Controlla le credenziali ei valori del database nel .envfile. E concedere le autorizzazioni all'utente del database per quel database.

Questi sono alcuni problemi comuni che probabilmente dovrai affrontare quando distribuisci la tua app Laravel e se inizi a ricevere tutti questi comandi, ti suggerisco di creare uno script che ti farà risparmiare tempo.


3

Per prima cosa concedi tutte le autorizzazioni per la cartella del tuo progetto (diciamo che si chiama laravel), per la sottocartella di archiviazione e la sua sottocartella dei log e per la sottocartella del fornitore (laravel / storage, laravel / storage / logs e laravel / vendor).

Quindi controlla se hai il file .env - in caso contrario puoi eseguire:

$ mv .env.example .env

per rinominare il tuo .env.example incorporato nel .env necessario.

Altrimenti attiva la modalità di debug: apri .env e imposta

APP_DEBUG=true

e apri laravel / config / app.php e cambia

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

per

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

così puoi scoprire qual è il motivo del tuo errore.


4
Non c'è motivo per cui dovresti modificare config / app.php in questo modo. Negherebbe l'intero scopo del file .env.
Nathan

Ricevo errori di servizio interno quando ho eseguito la mia app laravel sul mio server di prova (in modalità di produzione). L'impostazione di APP_DEBUG = true mi ha permesso di vedere i dettagli dell'errore, quindi ho potuto trovare e risolvere il problema.
Debbie V

3

Esegui questi due comandi nella directory in cui è installato Laravel:

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

Quindi svuota la cache e scarica il caricamento automatico:

php artisan cache:clear
composer dump-autoload

3

Ho affrontato questo problema molte volte. Prova uno di questi passaggi mi ha aiutato molto. Forse ti aiuterà anche.

  1. Prima di tutto controlla i permessi dei tuoi file.
  2. Per correggere i permessi dei file sudo chmod 755 -R your_project
  3. Quindi chmod -R o + w your_project / storage per scrivere il file nella cartella di archiviazione.
  4. php artisan cache: clear
    composer dump-autoload
  5. php artisan key: generate
  6. Quindi controlla i requisiti del server secondo il requisito di laravel.
  7. Molte volte hai ricevuto questo errore a causa della versione php . Prova a cambiare la tua versione di php in cpanel.
  8. Quindi configura correttamente il tuo file .htaccess

2

Se usi vagabondo, prova questo:

Prima rimuovi config.php in current / vendor.

Esegui questi comandi:

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

NON ESEGUIRE php artisan config: cache.

Spero che questo aiuto.


1

Esegui questi due comandi nella root di laravel

trova * -type d -print0 | xargs -0 chmod 0755 # per le directory

trova . -type f -print0 | xargs -0 chmod 0644 # per i file


1

Ho un problema simile con un host condiviso. Stavo avendo 500 errore. Ho appena risolto controllando la versione di Laravel e la versione di PHP. L'errore era perché Laravel 5.6 non funziona su PHP 7.0.x Una volta che lo so, riconfiguro semplicemente il progetto su Laravel 5.5 che è compatibile con PHP 7.0.x ora è tutto a posto. Un altro motivo per cui a volte ho problemi è l'FTP. Ottengo file danneggiati e devo caricare il progetto più di una volta. Spero che questo aiuto in futuro Non ho trovato così tante informazioni in questo argomento.


1

Per quelli di voi che come me hanno ancora errori dopo aver provato tutte le altre risposte:

Controlla la versione di php apache utilizzata, l'ultimo laravel funziona solo con php7.1. Quindi devi:

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

spero che sia di aiuto


1

se è su un server live, prova questo

<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]

quindi assicurati anche che la versione php nel tuo composer.json sia la stessa del tuo server.

Controlla la tua versione php nel tuo terminale usando php -v


1

Assicurati di aver eseguito sull'istanza composer updatedel tuo server.


1

Primo se non c'è il file .env nel tuo repository laravel. Copia e incolla il file .env.example e rinominalo in .env. quindi aprire il file .env e nella parte del database fornire la descrizione del database. Esegui: php artisan key: genera php artisan cache: clear php artisan config: cache php artisan config: clear composer dump-autoload php artisan serve


0

Secondo i registri:

[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

Ci sono alcuni errori nell'apertura dei file nella cartella / vendor.

Installando e aggiornando tramite composer, sono stato finalmente in grado di risolvere il problema.

sudo composer install
sudo composer update

0

Assicurati che la cartella di archiviazione con write previlege (chmod o + w) funzioni per me come un incantesimo.



0

Ho affrontato questo problema e l'ho risolto aggiornando la mia versione php in apache fino a 5.6.x.


0

Modificare l'autorizzazione della cartella Web solo tramite questo comando:

sudo chmod 755 -R your_folder


0

Ho appena eseguito il seguente comando:

php artisan passport:install

Stavo usando il passaporto per eseguire la mia applicazione completamente basata su API e Vue.js. Laravel ha funzionato bene ma ogni volta che ho provato ad accedere tramite la mia API avrei ricevuto l'errore. Dopo aver eseguito il comando e aggiornato client_id e client_secret sui miei file Laravel, quindi inviato i nuovi aggiornamenti al server live, il problema è stato risolto. Nel mio modello utente ho uno script come segue:

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);
}

Ho appena aggiornato client_id e client_secret solo dopo averli salvati. Poiché il comando passport ti fornisce due chiavi client:

1) client di accesso personale (client_id e client_secret)

2) Concessione password client (client_id e client_secret)

Ho utilizzato il client di concessione della password. Spero che questo aiuti qualcuno là fuori :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.