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.