Получение 500 внутренней ошибки сервера в Laravel 5+ Ubuntu 14.04


88

Я много раз устанавливал 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.
Майк Рокетт

1
«Я установил rewrite_mod, но ...» - и разрешил соответствующий доступ для .htaccess AllowOverrideв конфигурации вашего сервера?
MrWhite

@MikeRockett Недавно я удалил «Параметры», когда браузер оставил его пустым, а когда он не оставался, браузер возвращает ошибку запроса 500, но в обоих случаях браузер возвращает ошибку 500. !
DpEN

1
@MikeRockett .. Я удалил "/../" из файла index.php и попытался показать различные ошибки прав доступа к файлам, а затем chmod и установил права чтения / записи, и это сработало !!! Спасибо за помощь, братан !!
DpEN

Ответы:


215

Наконец-то преодолел проблему

  • Проблема заключалась не в файле .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.
Арунабх Дас 04

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

где я должен cd (сменить каталог), чтобы выполнить эту команду?
Анастаси Лоран,

1
Вам нужно много файлов cookie. Прекрасно работал на LAMP Ubuntu 16.04. Установка Digital Ocean.
Abhishek Saini

75

Создайте файл .env и также запустите:

php artisan key:generate

Это сработало для меня после создания проекта git.

После создания файла .env и генерации ключа запустите приведенный ниже код:

php artisan cache:clear 
php artisan config:clear

3
Это сработало для меня. Не делайте ошибку новичка, после установки проекта laravel не забудьте переименовать .env.example в .env или php artisan key: генерация приведет к сбою
Армин

ОК, это новая вещь? Первый раз столкнувшись с этой проблемой
Роберт Роча

1
php artisan cache:clear php artisan config:clearработает в моем случае
Нуркартико 06

27

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

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

здесь "laravel" - это имя каталога, в котором установлен laravel


с помощью этой команды обязательно запустите командуcomposer install
Ифтихар Али Ансари

sudo chmod -R 755 laravelрасположение -R неверно
Hïkmãt Iskandar

22

Попробуйте проверить, есть ли у вас .envфайл.

В основном это может вызвать что-то подобное. Попробуйте создать файл, затем скопируйте все из него .env.example, вставьте его в созданный файл и назовите его .env. или просто переименуйте .env.exampleфайл .envи запуститеphp artisan key:generate


эта помощь с первой попытки +
AZinkey

15

Убедитесь, что файл .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

Затем перезапустите сервер, например XAMPP, или другой, и он должен работать.


3
777 - очень плохая команда, которая предоставит WRITE доступ любому пользователю в Интернете. 644 более целесообразно.
Зак Грирсон

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
Что это, черт возьми, вы действительно знаете, что отвечаете!
Джимми Обоньо Абор

3
@JimmyObonyoAbor На самом деле это работает. Согласно журналам, 500 было вызвано отсутствием некоторых файлов в / vendor. Как это исправить? Запустив composer install / update. Спасибо и голос за, Христос Папулас
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

4

Прочитал все комментарии и предложения. 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, и если вы начнете получать все эти команды, я предлагаю вам создать сценарий, который сэкономит ваше время.


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 позволила мне увидеть подробности ошибки, чтобы затем я мог найти и исправить проблему.
Debbie 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 artisan key: генерировать
  6. Затем проверьте требования к серверу в соответствии с требованиями laravel.
  7. Много раз вы получали эту ошибку из-за версии php . Попробуйте изменить свою версию php в cpanel.
  8. Затем правильно настройте файл .htaccess.

2

Если вы используете vagrant, попробуйте следующее:

Сначала удалите config.php в текущем / vendor.

Выполните эту команду:

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

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

Надеюсь на эту помощь.


1

Запустите эти две команды в корне laravel

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

находить . -тип f -print0 | 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 key: создать кеш php artisan: очистить конфигурацию php artisan: кешировать конфигурацию php artisan: очистить дамп композитора-автозагрузку 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

Убедитесь, что папка для хранения с приоритетом записи (chmod o + w) работает для меня как шарм.





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.