Отримання внутрішньої помилки сервера 500 на Laravel 5+ Ubuntu 14.04


85

Я багато разів встановлював Laravel в ОС Windows, але такого типу проблем ніколи не виникало. Цей внутрішній сервер 500 зазвичай виникає, коли ваш модуль "mod_rewrite" не ввімкнено.

Однак на Ubuntu 14.04 ця проблема болить у мене. Я встановив rewrite_mod, але він також не працює. Я надав доступ до всіх своїх папок і файлів всередині, тобто

/ var / www / html / laravel_project

Проте це не працює. Змінено також .htaccess з оригінального на цей.

    +FollowSymLinks
RewriteEngine On

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

У мене є всі необхідні розширення, необхідні і для Laravel 5+. Чи залишилось щось, чого я не робив?


5
так що перевірте свій журнал помилок, щоб побачити подробиці про 500. поки ви не знаєте, що це, немає сенсу розмахувати всюди.
Marc B

2
Чому він просто +FollowSymLinksу верхній частині? Має бути Options +FollowSymLinks.
Mike Rockétt

1
"Я встановив rewrite_mod, але ..." - і дозволив відповідний доступ для .htaccess за допомогою AllowOverrideконфігурації сервера?
MrWhite

@MikeRockett Я нещодавно видалив "Параметри", коли його браузер залишається білим, а якщо не зберігає, браузер повертає помилку 500 запитів, але в обох випадках браузер повертає 500 помилок. !
DpEN

1
@MikeRockett .. Я видалив "/../" з файлу index.php і спробував показати різні помилки дозволів файлів, а потім chmod і встановив дозволи на читання / запис, і це спрацювало !!! Дякуємо за допомогу, брате !!
DpEN

Відповіді:


214

Нарешті подолала проблему

  • Проблемою був не файл .htaccess, ані index.php. Проблема полягала у доступі до файлів та вимаганні дозволів.

Для вирішення проблеми я провів наступні команди через термінал.

sudo chmod -R 755 laravel_blog

а потім введіть нижче, щоб дозволити laravel писати файл у папку зберігання

chmod -R o+w laravel_blog/storage

Ці дві команди вирішили проблему.


1
Дякую, у мене була ця проблема під час встановлення laravel на свіжий дистрибутив ubuntu 14.04 на обчислювальному двигуні Google, це вирішило.
Alex

1
Дякую за це. Це вирішило проблему як на ubuntu, так і на mac.
Арунабх Дас,

2
це дуже погана порада, chmod встановлює для всіх файлів значення + x. Я припускаю, що ви хотіли зробити це для каталогів, і в цьому випадку ви б використали find.
MightyPork

де мені слід cd (змінити каталог), щоб виконати цю команду?
Анастасі Лоран

1
Вам потрібно багато печива. Відмінно працював на установці LAMP Ubuntu 16.04 Digital Ocean.
Абхішек Сайні

71

Створіть файл .env і також запустіть:

php artisan key:generate

Це спрацювало для мене після витягування проекту git.

Створивши файл .env та створивши ключ, запустіть код нижче:

php artisan cache:clear 
php artisan config:clear

3
Це спрацювало для мене. Не робіть жодної помилки, після встановлення проекту laravel переконайтеся, що перейменуєте .env.example в .env або php artisan key: generated буде аварійно
Armin

Добре, це нова річ? Вперше зіткнувся з цією проблемою
Роберт Роча,

1
php artisan cache:clear php artisan config:clearпрацює на мою справу
Нуркартіко

27

Після встановлення запустіть команду нижче

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

тут "laravel" - це назва каталогу, де встановлено laravel


за допомогою цієї команди обов’язково запустіть командуcomposer install
Iftikhar Ali Ansari

sudo chmod -R 755 laravelмісцезнаходження -R неправильне
Хікмат Іскандар

20

Спробуйте перевірити, чи є у вас .envфайл.

Здебільшого це може спричинити щось подібне. Спробуйте створити файл, а потім скопіюйте все .env.example, вставте його у створений файл та назвіть його .env. або jsut просто перейменуйте .env.exampleфайл .envі запустітьphp artisan key:generate


ця допомога з першої спроби +
AZinkey

14

Переконайтеся, що файл .env, що містить APP_KEY , існує у кореневій папці .

Те, що повинно бути в .env, не було чітко зазначено в інших рішеннях, і я думав, що я буду зводити його до викладеного вище речення.

Це виправило мою помилку 500 при новій установці Laravel.

Кроки:

  1. Створіть файл .env у кореневій формі (наприклад touch .env)
  2. Переконайтеся, що він містить принаймні один рядок: APP_KEY=
  3. Створіть ключ програми в терміналі: php artisan key:generate

Примітки:

  • Моя конкретна інсталяція не включала жодного .env (приклад чи інше)

  • Просто наявність порожнього .env не працює.

  • .Env, що містить параметри, але жоден APP_KEYпараметр, не працює.

Помилка?: При генерації ключа програми в терміналі він може повідомити про успіх, однак жоден ключ насправді не буде розміщений у .env, якщо у файлі немає попередньо існуючого APP_KEY=рядка.

Для довідки, ось офіційний .env з корисними базовими параметрами. Скопіюйте та вставте те, що вам потрібно:

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


12

Я зіткнувся з подібною помилкою. Я перевірив вхід /var/log/apache2/error.logі знайшов UnexpectedValueException

Я змінив власника на мого користувача apache папки сховища в директорії проекту.

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

У моєму випадку власником процесу apache2 є www-data, тож змініть це на своє, це можна знайти у конфігураційному файлі apache2. Сподіваюся, це вам корисно.


12

Я виправив за допомогою цієї команди:

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

Потім перезапустіть сервер eather XAMPP або ще один, і він повинен працювати.


3
777 - дуже погана команда, яка надасть доступ до WRITE кожному в Інтернеті. 644 є більш доцільним.
Zac Grierson

9

Може ще одне рішення цієї проблеми:

Встановіть необхідні пакети, запустивши команду composer з кореня проекту:

sudo composer install

ОНОВЛЕННЯ:

  • Вам не слід запускати цю команду на робочому сервері, але деякі проблеми з композитором можна вирішити за допомогою цього на локальних envs.

РЕДАГУВАТИ:

  • погляньте на https://getcomposer.org/doc/faqs/how-to-install-untrusted-packages-safely.md, щоб побачити, чому запуск композиторської інсталяції як root не є гарною ідеєю
  • Якщо вам потрібно запустити його як root, надайте наступні прапори , щоб заблокувати сторонній код під час встановлення --no-plugins --no-scripts

1
Що це за біс, ти насправді знаєш, на що відповідаєш!
Jimmy Obonyo Abor

3
@JimmyObonyoAbor Насправді це працює. Згідно з журналами, 500 було пов’язано з відсутністю деяких файлів у / vendor. Як це виправити? Запустивши установку / оновлення композитора. Подяка та підтримка, Христос Папулас
tomsihap

5
Я вважаю, що запуск цієї команди з sudo є потенційною дірою в безпеці
Шей

5

У мене були встановлені PHP 7.0 і PHP 7.1, і я використовував PHP 7.1 у командному рядку, і PHP 7.0 було ввімкнено на Apache, що безлад може спричинити проблеми, коли ви використовуєте Laravel Framework та localhost Apache2 з laravel.

Спочатку перевірте свій файл композитора, щоб побачити вашу версію PHP.

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

Перевірте поточну версію php у командному рядку

php -v

Перевірте, чи ввімкнена ваша версія php на Apache, я використовував браузер.

http://localhost

Якщо це не те саме, вимкніть поточну версію та ввімкніть найновішу.

sudo a2dismod php7.2

sudo a2enmod php7.1

sudo service apache2 restart

Після цього змініть права доступу до папки

sudo chmod 755 -R blog

для папки зберігання

chmod -R o+w blog/storage

5

Часта проблема при використанні git:

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

Вирішили це, додавши вручну файл .env на сервер або завантаживши його через FTP


4

Іноді виникає проблема з версією php. Нам потрібно змінити версію php із сервера. Просто запишіть нижче рядок у файл .htaccess :

AddHandler application/x-httpd-php5 .php

3

Спочатку дозвольте всі дозволи для вашої папки проекту (скажімо, це називається laravel), для підпапки зберігання та її підпапки журналів та для підпапки постачальника (laravel / storage, laravel / storage / logs і laravel / vendor).

Потім перевірте, чи є у вас файл .env - якщо ні, то ви можете запустити:

$ mv .env.example .env

перейменувати вбудований .env.example на необхідний .env.

В іншому випадку увімкніть режим налагодження - відкрийте .env та встановіть

APP_DEBUG=true

і відкрийте laravel / config / app.php та змініть

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

до

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

щоб ви могли з’ясувати, в чому причина вашої помилки.


4
Немає жодної причини, що ви повинні редагувати config / app.php так. Це заперечує всю мету файлу .env.
Натан

Я отримував помилки внутрішньої служби, коли запускав програму laravel на своєму тестовому сервері (у виробничому режимі). Встановлення APP_DEBUG = true дозволило мені побачити деталі помилки, щоб потім я міг знайти та виправити проблему.
Деббі V,

3

Запустіть ці дві команди в каталозі, де встановлено Laravel:

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

Потім очистіть кеш і скиньте автоматичне завантаження:

php artisan cache:clear
composer dump-autoload

3

Я неодноразово стикався з цією проблемою. Спробуйте один із цих кроків, який мені дуже допоміг. Можливо, це теж вам допоможе.

  1. Перш за все перевірте права доступу до файлу.
  2. Щоб виправити дозволи для файлів sudo chmod 755 -R your_project
  3. Потім chmod -R o + w your_project / storage для запису файлу в папку сховища.
  4. php artisan cache: очищення
    композитора, що завантажується, завантажується автоматично
  5. php ремісничий ключ: генерувати
  6. Потім перевірте вимоги сервера до вимог laravel.
  7. Багато разів ви отримували цю помилку через версію php . Спробуйте змінити свою версію php в cpanel.
  8. Потім правильно налаштуйте файл .htaccess

3

Я прочитав усі зауваження та пропозиції. 500 - КОД ПОМИЛКИ HTTP являє собою внутрішню помилку сервера.

Причини цієї помилки:

  • Там в основному причина через проблеми з дозволами
  • Змінні середовища не знайдено або .envфайл не знайдений у вашому кореневому каталозі
  • Проблема розширень PHP
  • Проблема з базою даних

Виправлення:

  • Встановіть правильні дозволи:
    • Запустіть ці команди (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
  • Якщо файл .env не існує, створіть його touch .envта вставте змінні середовища, а потім запустіть
   php artisan key:generate
   php artisan cache:clear
   php artisan config:clear
   composer dump-autoload
  • Перевірте свій файл php.ini і розкоментуйте потрібні розширення (У деяких випадках вам доведеться встановити розширення, запустивши цю команду apt-get install php7.2-[extension-name]
  • Перевірте облікові дані та значення бази даних у .envфайлі. І надати дозволи користувачеві бази даних для цієї бази даних.

Це деякі загальні проблеми, з якими ви, мабуть, зіткнетесь при розгортанні програми laravel, і коли ви почнете отримувати всі ці команди, я пропоную вам створити сценарій, який заощадить ваш час.


2

Якщо ви використовуєте бродягу, спробуйте наступне:

Спочатку видаліть config.php у поточному / постачальнику.

Запустіть цю команду:

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

НЕ ЗАПУСКАТИ php artisan config: cache.

Сподіваюся, це допоможе.


1

Запустіть ці дві команди на корені laravel

знайти * -тип d -друк0 | xargs -0 chmod 0755 # для каталогів

знайти. -тип f -друк0 | xargs -0 chmod 0644 # для файлів


1

У мене схожа проблема з хостом спільного доступу. У мене було 500 помилок. Я щойно виправив, перевіривши версію Laravel та версію PHP. Помилка в тому, що Laravel 5.6 не працює на PHP 7.0.x Як тільки я це знаю, я просто переналаджую проект на Laravel 5.5, сумісний з PHP 7.0.x, тепер все в порядку. Ще однією причиною, що у мене іноді виникають проблеми, є FTP, я отримую пошкоджені файли і мені доводиться завантажувати проект не раз. Сподіваюся, ця допомога надалі не знайдела стільки інформації в цій темі.


1

Для тих з вас, хто мені подобається, все-таки виникають помилки після випробування всіх інших відповідей:

Перевірте, яку версію використовує php apache, остання версія laravel працює лише з php7.1. Отже, ви повинні:

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

сподіваюся, це допоможе


1

якщо це на реальному сервері, спробуйте це

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

тоді також переконайтесь, що версія php у вашому composer.json така ж, як і на вашому сервері.

Перевірте свою версію php у своєму терміналі за допомогою php -v



1

По-перше, якщо у вашому сховищі laravel немає файлу .env. Скопіюйте та вставте файл .env.example та перейменуйте його на .env. потім відкрийте файл .env і в частині бази даних дайте опис бази даних. Виконати: php artisan ключ: генерувати кеш php artisan: очистити php artisan config: cache php artisan config: clear composer dump-autoload php artisan serve


0

За журналами:

[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

Є деякі помилки при відкритті файлів у папці / vendor.

Встановивши та оновивши за допомогою композитора, я зміг остаточно вирішити проблему.

sudo composer install
sudo composer update





0

Я просто запустив таку команду:

php artisan passport:install

Я використовував паспорт, щоб повністю запустити свою програму на основі API та Vue.js. Laravel працював нормально, але кожного разу, коли я намагався увійти через свій API, я отримував помилку. Після запуску команди та оновлення client_id та client_secret у моїх файлах Laravel, а потім надсилання нових оновлень на сервер, проблема була вирішена. У моїй користувацькій моделі у мене є такий сценарій:

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

Я тільки що оновив client_id та client_secret, лише тоді збережений. Оскільки команда паспорта дає вам два клієнтські ключі:

1) Клієнт персонального доступу (client_id & client_secret)

2) Клієнт надання пароля (client_id & client_secret)

Я використовував клієнт надання пароля. Сподіваюся, це допоможе комусь там :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.