Laravel 5+ Ubuntu 14.04'te 500 Dahili Sunucu Hatası Alma


88

Laravel'i birçok kez Windows işletim sisteminde kurdum ama bu tür bir problem hiç oluşmadı. Bu 500 dahili sunucu genellikle "mod_rewrite" modülünüz açık olmadığında ortaya çıkar.

Ancak, Ubuntu 14.04'te bu sorun bana bir baş ağrısı veriyor. Rewrite_mod'u kurdum ama aynı zamanda çalışmıyor. İe içindeki tüm klasörlerime ve dosyalarıma erişim verdim

/ var / www / html / laravel_project

Yine de çalışmıyor. .Htaccess orijinalinden buna değiştirildi.

    +FollowSymLinks
RewriteEngine On

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

Laravel 5+ için gerekli tüm uzantılara da sahibim. Yapmadığım bir şey mi kaldı?


5
Bu yüzden 500 ile ilgili ayrıntıları görmek için hata günlüğünüzü kontrol edin. Bunu bilinceye kadar, her yerde sallanmanın bir anlamı yoktur.
Marc B

2
Neden sadece +FollowSymLinkstepesinde var? Olmalı Options +FollowSymLinks.
Mike Rockétt

1
"Rewrite_mod'u kurdum ama ..." - ve .htaccess AllowOverrideiçin sunucu yapılandırmanızda uygun erişime izin verdim ?
MrWhite

@MikeRockett kısa süre önce tarayıcıyı tuttuğumda "Seçenekler" i kaldırdım ve tutmadığında tarayıcı bir 500 istek hatası döndürüyor, ancak her iki durumda da tarayıcı 500 hatası döndürüyor. !
DpEN

1
@MikeRockett .. "/../" dosyasını index.php dosyasından kaldırdım ve farklı dosya izin hatalarını denedim ve gösterdim ve ardından chmod ve okuma / yazma izinlerini ayarladım ve işe yaradı !!! Yardım için teşekkürler kardeşim !!
DpEN

Yanıtlar:


215

Sonunda sorunu aştı

  • Sorun ne .htaccess dosyası ne de index.php idi. Sorun, dosyalara erişim ve izin gerektirmekti.

Sorunu çözmek için aşağıdaki komutları terminal üzerinden çalıştırdım.

sudo chmod -R 755 laravel_blog

ve sonra laravel'in dosyayı depolama klasörüne yazmasına izin vermek için aşağıya yazın

chmod -R o+w laravel_blog/storage

Bu iki komut sorunu çözdü.


1
Teşekkürler, laravel'i google hesaplama motorunda yeni bir ubuntu 14.04 dağıtımına yüklerken bu sorunu yaşadım, bu sorunu çözdü.
Alex

1
Bunun için teşekkürler. Bu, hem ubuntu hem de Mac'teki sorunu çözdü.
Arunabh Das

2
bu çok kötü bir tavsiye, chmod tüm dosyaları + x olarak ayarlar. Bunu dizinler için yapmak istediğinizi varsayıyorum, bu durumda bul'u kullanırsınız.
MightyPork

Bu komutu çalıştırmak için nereye cd (dizini değiştir) yapmalıyım?
Anastasie Laurent

1
Birçok kurabiyeye ihtiyacınız var. LAMP Ubuntu 16.04 Digital Ocean Kurulumunda iyi çalıştı.
Abhishek Saini

75

.Env dosyasını oluşturun ve ayrıca çalıştırın:

php artisan key:generate

Bu, bir git projesi çektikten sonra benim için çalıştı.

.Env dosyasını oluşturduktan ve anahtarı oluşturduktan sonra, aşağıdaki kodu çalıştırın:

php artisan cache:clear 
php artisan config:clear

3
Bu benim için çalıştı. Noob hatası yapmayın, laravel projesini yükledikten sonra .env.example'ı .env veya php artisan anahtarı olarak yeniden adlandırdığınızdan emin olun: create çökecek
Armin

Tamam bu yeni bir şey mi? Bu problemle ilk kez karşılaşıyorum
Robert Rocha

1
php artisan cache:clear php artisan config:clearbenim
durumum

27

Aşağıdaki çalıştır komutunu yükledikten sonra

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

burada "laravel", laravel'in kurulu olduğu dizinin adıdır


bu komutla komutu çalıştırdığınızdan emin oluncomposer install
Iftikhar Ali Ansari

sudo chmod -R 755 laravel
-R'nin

22

.envDosyanız olup olmadığını kontrol etmeye çalışın .

Çoğunlukla bu şey, böyle bir şeye neden olabilir. Bir dosya oluşturmayı deneyin, ardından her şeyi .env.examplekopyalayın, oluşturduğunuz dosyaya yapıştırın ve adlandırın .env. veya jsut basitçe .env.exampledosyayı yeniden adlandırın .envve çalıştırınphp artisan key:generate


ilk denemede bu yardım +
AZinkey

15

Kökte APP_KEY içeren bir .env dosyasının mevcut olduğundan emin olun .

.Env'de olması gereken, diğer çözümlerde açıkça belirtilmemiştir ve yukarıdaki cümleye indirgemeyi düşündüm.

Bu, Laravel'in yeni bir kurulumundaki 500 hatamı düzeltti.

Adımlar:

  1. Kökte bir .env dosyası oluşturun (ör. touch .env)
  2. En az bir satır içerdiğinden emin olun: APP_KEY=
  3. Terminalde bir uygulama anahtarı oluşturun: php artisan key:generate

Notlar:

  • Benim özel kurulumum herhangi bir .env içermiyordu (örnek veya başka türlü)

  • Basitçe boş bir .env kullanmak işe yaramaz.

  • Parametreler içeren ancak parametre içermeyen bir .env APP_KEYçalışmaz.

Hata ?: Terminalde bir uygulama anahtarı oluştururken başarılı olarak raporlanabilir, ancak dosyanın önceden mevcut APP_KEY=satırı yoksa .env içine hiçbir anahtar yerleştirilmez .

Referans olarak, kullanışlı temel parametreler içeren resmi .env burada. İhtiyacınız olanı kopyalayıp yapıştırın:

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


12

Benzer bir hatayla karşılaştım. Oturum açmayı kontrol ettim /var/log/apache2/error.logve Beklenmeyen Değer İstisnası buldum

Proje dizini altındaki depolama klasörünün sahibini apache kullanıcım olarak değiştirdim.

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

Benim durumumda apache2 işlemin sahibi www-data, bu yüzden bunu sizinkiyle değiştirin, bu apache2 yapılandırma dosyasında bulunabilir. Umarım bu sizin için yararlıdır.


12

Bu Komutla düzelttim:

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

Bir sunucuyu yeniden başlattıktan sonra XAMPP yerine başka bir sunucu ve bu çalışıyor olmalı.


3
777 çok kötü bir komuttur ve internetteki herkese YAZMA erişimi verecektir. 644 daha tavsiye edilir.
Zac Grierson

9

Bu soruna başka bir çözüm olabilir:

Composer komutunu projenin kökünden çalıştırarak gerekli paketleri kurun:

sudo composer install

GÜNCELLEME:

  • Bu komutu bir üretim sunucusunda çalıştırmamalısınız, ancak composer ile ilgili bazı sorunlar yerel ortamlarda bununla çözülebilir.

DÜZENLE:


1
Bu da ne, gerçekten ne cevapladığınızı biliyor musunuz?
Jimmy Obonyo Abor

3
@JimmyObonyoAbor Aslında bu çalışıyor. Günlüklere göre 500, / vendor içindeki bazı dosyaların eksik olmasından kaynaklanıyordu. Bunu nasıl düzeltirsin? Besteci yükleme / güncelleme çalıştırarak. Teşekkürler ve olumlu oy verin, Christos Papoulas
tomsihap

5
Bu komutu sudo ile çalıştırmanın potansiyel bir güvenlik açığı olduğuna inanıyorum
Shay

5

PHP 7.0 ve PHP 7.1'i kurdum ve komut satırında PHP 7.1 kullanıyordum ve Apache'de PHP 7.0 etkinleştirildi, Laravel Framework ve localhost Apache2'yi laravel ile kullanırken dağınıklık sorunları ortaya çıkarabilir.

PHP sürümünüzü görmek için önce composer dosyanızı kontrol edin.

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

Komut satırında mevcut php sürümünüzü kontrol edin

php -v

Apache'de şu anda etkin olan php sürümünüzü kontrol edin, tarayıcıyı kullandım.

http://localhost

Aynı değilse, mevcut sürümü devre dışı bırakın ve en yenisini etkinleştirin.

sudo a2dismod php7.2

sudo a2enmod php7.1

sudo service apache2 restart

Bundan sonra klasör izinlerini değiştir

sudo chmod 755 -R blog

saklama klasörü için

chmod -R o+w blog/storage

5

Git kullanırken sık karşılaşılan bir sorun:

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

Bunu, sunucuya manuel olarak bir .env dosyası ekleyerek veya FTP yoluyla yükleyerek çözdüm


4

Bazen php sürümünde sorun vardır. Sunucudan php sürümünü değiştirmemiz gerekiyor. Htaccess dosyasında aşağıdaki dizeyi yazmanız yeterlidir :

AddHandler application/x-httpd-php5 .php

4

Tüm yorum ve önerileri okudum. 500 - HTTP HATA KODU dahili sunucu hatasını gösterir.

Bu hatanın nedenleri:

  • İzin sorunlarından kaynaklanan temel neden var
  • .envKök dizininizde bulunamadı veya dosya bulunamadı
  • PHP uzantıları sorunu
  • Veritabanı sorunu

Düzeltme:

  • Doğru izinleri ayarlayın:
    • Bu komutları çalıştırın (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
  • Eğer .env dosya yok, bir tane oluşturun touch .envve ortam değişkenleri yapıştırın ve sonra çalıştırın
   php artisan key:generate
   php artisan cache:clear
   php artisan config:clear
   composer dump-autoload
  • Php.ini dosyanızı kontrol edin ve ihtiyacınız olan uzantıların açıklamasını kaldırın (Bazı durumlarda bu komutu çalıştırarak uzantıyı yüklemeniz gerekir. apt-get install php7.2-[extension-name]
  • .envDosyadaki veritabanı kimlik bilgilerinizi ve değerlerinizi kontrol edin . Ve bu veritabanı için veritabanı kullanıcısına izinler verin.

Bunlar, laravel uygulamanızı dağıtırken karşılaşacağınız yaygın bir sorundur ve tüm bu komutları almaya başladığınız zaman, size zaman kazandıracak bir betik oluşturmanızı öneririm.


3

Öncelikle, proje klasörünüz için (diyelim ki buna laravel deniyor), depolama alt klasörü ve günlükleri alt klasörü ve satıcı alt klasörü (laravel / storage, laravel / storage / logs ve laravel / vendor) için tüm izinlere izin verin.

Sonra .env dosyanızın olup olmadığını kontrol edin - eğer çalıştıramıyorsanız:

$ mv .env.example .env

yerleşik .env.example dosyanızı gereken .env olarak yeniden adlandırmak için.

Aksi takdirde hata ayıklama modunu açın - .env'yi açın ve ayarlayın

APP_DEBUG=true

ve laravel / config / app.php dosyasını açın ve değiştirin

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

-e

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

böylece hatanızın nedenini öğrenebilirsiniz.


4
Config / app.php'yi bu şekilde düzenlemeniz için hiçbir sebep yok. .Env dosyasının tüm amacını geçersiz kılar.
Nathan

Laravel uygulamamı test sunucumda çalıştırdığımda (üretim modunda) Dahili Servis hataları alıyordum. APP_DEBUG = true ayarı, hatanın ayrıntılarını görmeme izin verdi, böylece sorunu bulup düzeltebilirdim.
Debbie V

3

Bu iki komutu Laravel'in kurulu olduğu dizinde çalıştırın:

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

Ardından önbelleği temizleyin ve otomatik yüklemeyi boşaltın:

php artisan cache:clear
composer dump-autoload

3

Bu problemle birçok kez karşılaştım. Bu adımlardan birini deneyin bana çok yardımcı oldu. Belki sana da yardımcı olur.

  1. Öncelikle dosya izinlerinizi kontrol edin.
  2. Dosya izinlerini düzeltmek için sudo chmod 755 -R your_project
  3. Sonra chmod -R o + w projeniz / deponuz dosyayı depolama klasörüne yazmak için.
  4. php artisan önbelleği: composer dump-autoload temizle
  5. php artisan anahtarı: oluştur
  6. Ardından , laravel gereksinimine göre sunucu gereksinimlerini kontrol edin .
  7. Çoğu zaman bu hatayı php sürümü nedeniyle aldınız . Php sürümünüzü cpanel'de değiştirmeyi deneyin .
  8. Ardından .htaccess dosyanızı doğru şekilde yapılandırın

2

Serseri kullanıyorsanız, şunu deneyin:

Önce current / vendor'daki config.php dosyasını kaldırın.

Şu komutu çalıştırın:

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

Php artisan yapılandırmasını ÇALIŞTIRMAYIN: önbellek.

Umarım bu yardımcı olur.


1

Bu iki komutu laravel'in kökünde çalıştırın

bul * -tipi d -print0 | xargs -0 chmod 0755 # dizinler için

bul. -tipi f -print0 | xargs -0 chmod 0644 # dosyalar için


1

Paylaşım Sunucusuyla benzer bir sorunum var. 500 hatası alıyordum. Sadece Laravel sürümünü ve PHP sürümünü kontrol ederek düzelttim. Hata, Laravel 5.6'nın PHP 7.0.x üzerinde çalışmamasıydı. Bunu bildiğimde, projeyi PHP 7.0.x ile uyumlu Laravel 5.5'e yeniden yapılandırdım, şimdi her şey doğru. Bazen sorun yaşamamın bir başka nedeni de, dosyaları bozduğum ve projeyi birden çok kez yüklemem gereken FTP'dir. Umarım bu yardım gelecekte bu konuda çok fazla bilgi bulamadım.


1

Benden hoşlananlarınız için, diğer tüm cevapları denedikten sonra hala hatalar var:

Php apache'nin kullandığı sürümü kontrol edin, en son laravel yalnızca php7.1 ile çalışır. Yani yapmanız gereken:

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

Bu yardımcı olur umarım


1

canlı bir sunucudaysa bunu deneyin

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

daha sonra composer.json dosyanızdaki php sürümünün sunucunuzunki ile aynı olduğundan emin olun.

Kullanarak terminalinizdeki php sürümünüzü kontrol edin php -v


1

composer updateSunucu örneğinizde çalıştırdığınızdan emin olun .


1

Öncelikle laravel deponuzda .env dosyası yoksa. .Env.example dosyasını kopyalayıp yapıştırın ve .env olarak yeniden adlandırın. sonra .env dosyasını açın ve veritabanı bölümünde veritabanı tanımınızı verin. Çalıştır: php artisan key: php artisan cache oluştur: clear php artisan config: cache php artisan config: clear composer dump-autoload php artisan serve


0

Günlüklere göre:

[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

Dosyaları / vendor klasörüne açarken bazı hatalar var.

Besteci aracılığıyla kurup güncelleyerek sorunu nihayet çözebildim.

sudo composer install
sudo composer update

0

Yazma önceliğine sahip depolama klasörünün (chmod o + w) benim için bir cazibe gibi çalıştığından emin olun.



0

Bu sorunla karşılaştım ve php sürümümü apache'de 5.6.x'e yükselterek düzelttim


0

Yalnızca bu komutla web klasörü iznini değiştirin:

sudo chmod 755 -R your_folder


0

Sadece aşağıdaki komutu çalıştırdım:

php artisan passport:install

Uygulamamı tamamen API'lere ve Vue.js'ye dayalı olarak çalıştırmak için pasaport kullanıyordum. Laravel iyi çalıştı ama her seferinde API'm aracılığıyla giriş yapmaya çalıştığımda hatayı alıyordum. Laravel dosyalarımda komutu çalıştırıp client_id ve client_secret'i güncelledikten sonra yeni güncellemeleri canlı sunucuya gönderdikten sonra sorun çözüldü. Kullanıcı modelimde aşağıdaki gibi bir komut dosyam var:

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

Sadece client_id ve client_secret'i güncelledikten sonra kaydettim. Passport komutu size iki istemci anahtarı verdiğinden:

1) Kişisel erişim istemcisi (client_id & client_secret)

2) Şifre verme istemcisi (client_id & client_secret)

Şifre verme istemcisini kullandım. Umarım bu, dışarıdaki birine yardımcı olur :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.