Gặp lỗi 500 Internal Server Error trên Laravel 5+ Ubuntu 14.04


85

Tôi đã cài đặt Laravel nhiều lần trên hệ điều hành Windows nhưng chưa bao giờ xảy ra sự cố kiểu này. Máy chủ nội bộ 500 này thường xảy ra khi mô-đun "mod_rewrite" của bạn không được bật.

Tuy nhiên, trên Ubuntu 14.04, vấn đề này đang khiến tôi đau đầu. Tôi đã cài đặt rewrite_mod nhưng nó cũng không hoạt động. Tôi đã cấp quyền truy cập vào tất cả các thư mục và tệp của mình bên trong tức là

/ var / www / html / laravel_project

Tuy nhiên, nó không hoạt động. Đã thay đổi .htaccess cũng từ bản gốc thành này.

    +FollowSymLinks
RewriteEngine On

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

Tôi cũng có tất cả các tiện ích mở rộng cần thiết cho Laravel 5+. Có điều gì còn lại mà tôi đã không làm?


5
vì vậy hãy kiểm tra nhật ký lỗi của bạn để xem chi tiết về 500. cho đến khi bạn biết có điều đó, không có ích gì khi bạn loanh quanh khắp nơi.
Marc B

2
Tại sao nó chỉ có +FollowSymLinksở trên cùng? Nên Options +FollowSymLinks.
Mike Rockétt,

1
"Tôi đã cài đặt rewrite_mod nhưng ..." - và cho phép quyền truy cập thích hợp cho .htaccess với AllowOverridetrong cấu hình máy chủ của bạn?
MrWhite

@MikeRockett Tôi gần đây đã xóa "Tùy chọn" khi giữ nó, trình duyệt chuyển sang màu trắng và khi không giữ nó, trình duyệt trả về lỗi yêu cầu 500 nhưng trong cả hai trường hợp, trình duyệt trả về lỗi 500. !
DpEN

1
@MikeRockett .. Tôi đã xóa "/../" khỏi tệp index.php và đã thử và hiển thị các lỗi khác nhau về quyền tệp và sau đó chmod và đặt quyền đọc / ghi và nó đã hoạt động !!! Thanx cho các bro giúp đỡ !!
DpEN

Câu trả lời:


214

Cuối cùng đã khắc phục được sự cố

  • Vấn đề không phải là tệp .htaccess cũng như index.php. Vấn đề là khi truy cập các tệp và yêu cầu quyền.

Để giải quyết vấn đề, tôi đã chạy các lệnh sau thông qua thiết bị đầu cuối.

sudo chmod -R 755 laravel_blog

rồi gõ vào bên dưới để cho phép laravel ghi tệp vào thư mục lưu trữ

chmod -R o+w laravel_blog/storage

Hai lệnh này đã giải quyết được vấn đề.


1
Cảm ơn, tôi đã gặp sự cố này khi cài đặt laravel vào bản phân phối ubuntu 14.04 mới trên google compute engine, điều này đã giải quyết được nó.
Alex

1
Cám ơn vì cái này. Điều này đã khắc phục sự cố trên cả ubuntu và mac.
Arunabh Das

2
đây là một lời khuyên rất tồi, chmod đặt tất cả các tệp thành + x. Tôi giả sử bạn muốn làm điều đó cho các thư mục, trong trường hợp đó bạn sẽ sử dụng find.
MightyPork

Tôi nên cd (thay đổi thư mục) ở đâu để thực hiện lệnh đó?
Anastasie Laurent

1
Bạn cần nhiều cookie. Hoạt động tốt trên LAMP Ubuntu 16.04 Cài đặt Digital Ocean.
Abhishek Saini

71

Tạo tệp .env và cũng chạy:

php artisan key:generate

Điều này đã làm việc cho tôi sau khi kéo một dự án git.

Sau khi tạo tệp .env và tạo khóa, hãy chạy mã bên dưới:

php artisan cache:clear 
php artisan config:clear

3
Điều này đã làm việc cho tôi. Đừng mắc lỗi noob, sau khi cài đặt dự án laravel, hãy đảm bảo đổi tên .env.example thành .env hoặc php Artian key: create will crash
Armin

OK, đây có phải là một điều mới? Lần đầu tiên gặp phải vấn đề này
Robert Rocha

1
php artisan cache:clear php artisan config:clearđang làm việc cho trường hợp của tôi
Nurkartiko

27

Sau khi cài đặt chạy lệnh bên dưới

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

ở đây "laravel" là tên thư mục đã cài đặt laravel


với make lệnh này chắc chắn để chạy lệnhcomposer install
Iftikhar Ali Ansari

sudo chmod -R 755 laravelvị trí của -R là sai
hikmat Iskandar

20

Hãy thử kiểm tra xem bạn có .envtập tin không.

Chủ yếu là điều này có thể gây ra một cái gì đó như vậy. Cố gắng tạo một tệp sau đó sao chép mọi thứ từ đó .env.example, dán vào tệp đã tạo của bạn và đặt tên cho tệp đó .env. hoặc jsut chỉ cần đổi tên .env.exampletệp thành .envvà chạyphp artisan key:generate


trợ giúp này trong đầu nỗ lực +
AZinkey

14

Đảm bảo rằng tệp .env, chứa APP_KEY , tồn tại trong thư mục gốc.

Những gì nên có trong .env không được nêu rõ ràng trong các giải pháp khác, và tôi nghĩ rằng tôi sẽ tóm tắt nó xuống câu trên.

Điều này đã sửa lỗi 500 của tôi trên một bản cài đặt mới của Laravel.

Các bước:

  1. Tạo tệp .env trong thư mục gốc (ví dụ touch .env:)
  2. Đảm bảo rằng nó chứa ít nhất một dòng: APP_KEY=
  3. Tạo khóa ứng dụng trong thiết bị đầu cuối: php artisan key:generate

Ghi chú:

  • Cài đặt cụ thể của tôi không bao gồm bất kỳ .env nào (ví dụ hoặc cách khác)

  • Đơn giản chỉ cần có .env trống không hoạt động.

  • Một .env có chứa tham số, nhưng không có APP_KEYtham số, không hoạt động.

Lỗi ?: Khi tạo khóa ứng dụng trong terminal, nó có thể báo là thành công, tuy nhiên sẽ không có khóa nào thực sự được đặt trong .env nếu tệp không có APP_KEY=dòng tồn tại trước .

Để tham khảo, đây là .env chính thức với các thông số cơ sở hữu ích. Sao chép-dán những gì bạn cần:

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


12

Tôi đã phải đối mặt với một lỗi tương tự. Tôi đã kiểm tra thông tin đăng nhập /var/log/apache2/error.logvà tìm thấy một ngoại lệ bất ngờ

Tôi đã thay đổi chủ sở hữu thành người dùng apache của tôi của thư mục lưu trữ trong dir dự án.

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

Trong trường hợp của tôi là chủ sở hữu quy trình apache2 www-data, vì vậy hãy thay đổi điều này thành của bạn, điều này có thể được tìm thấy trong tệp cấu hình apache2. Hy vọng điều này là hữu ích cho bạn.


12

Tôi đã sửa bằng Lệnh này:

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

Hơn khởi động lại một máy chủ thay vì XAMPP quặng một máy chủ khác và nó sẽ hoạt động.


3
777 là một lệnh rất tệ và sẽ cung cấp quyền truy cập WRITE cho bất kỳ ai trên internet. 644 là khuyến khích hơn.
Zac Grierson

9

Có thể một giải pháp khác cho vấn đề này:

Cài đặt các gói cần thiết bằng cách chạy lệnh composer từ thư mục gốc của dự án:

sudo composer install

CẬP NHẬT:

  • Bạn không nên chạy lệnh này trên máy chủ sản xuất, nhưng một số vấn đề với trình soạn nhạc có thể được giải quyết bằng lệnh này trên env cục bộ.

BIÊN TẬP:


1
Cái quái gì thế này, bạn có thực sự biết mình đang trả lời gì không!
Jimmy Obonyo Abor

3
@JimmyObonyoAbor Trên thực tế, điều này đang hoạt động. Theo nhật ký, 500 là do một số tệp trong / nhà cung cấp bị thiếu. Làm thế nào để bạn khắc phục điều đó ? Bằng cách chạy cài đặt / cập nhật trình soạn nhạc. Cảm ơn và phiếu bầu tán thành, Christos Papoulas
tomsihap

5
Tôi tin rằng chạy lệnh đó với sudo là một lỗ hổng bảo mật tiềm ẩn
Shay

5

Tôi đã cài đặt PHP 7.0 và PHP 7.1 và tôi đang sử dụng PHP 7.1 trên dòng lệnh và PHP 7.0 đã được bật trên Apache, sự lộn xộn đó có thể gây ra sự cố khi bạn đang sử dụng Laravel Framework và localhost Apache2 với laravel.

Kiểm tra tệp trình soạn nhạc của bạn trước để xem phiên bản PHP của bạn.

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

Kiểm tra phiên bản php hiện tại của bạn trên dòng lệnh

php -v

Kiểm tra phiên bản php hiện tại của bạn được bật trên Apache, tôi đã sử dụng trình duyệt.

http://localhost

Nếu nó không giống nhau, hãy tắt phiên bản hiện tại và bật phiên bản mới nhất.

sudo a2dismod php7.2

sudo a2enmod php7.1

sudo service apache2 restart

Sau đó thay đổi quyền đối với thư mục

sudo chmod 755 -R blog

cho thư mục lưu trữ

chmod -R o+w blog/storage

5

Một vấn đề thường xuyên khi sử dụng git:

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

Giải quyết vấn đề này bằng cách thêm thủ công tệp .env trên máy chủ hoặc tải tệp lên thông qua FTP


4

Đôi khi có vấn đề với phiên bản php. Chúng tôi cần thay đổi phiên bản php từ máy chủ. Chỉ cần ghi lại chuỗi bên dưới trong tệp .htaccess :

AddHandler application/x-httpd-php5 .php

3

Đầu tiên cho phép tất cả các quyền cho thư mục dự án của bạn (giả sử nó được gọi là laravel), cho thư mục con lưu trữ và thư mục con nhật ký của nó và cho thư mục con nhà cung cấp (laravel / lưu trữ, laravel / lưu trữ / nhật ký và laravel / nhà cung cấp).

Sau đó, kiểm tra xem bạn có tệp .env không - nếu không, bạn có thể chạy:

$ mv .env.example .env

để đổi tên .env.example tích hợp của bạn thành .env cần thiết.

Nếu không, hãy bật chế độ gỡ lỗi - mở .env và đặt

APP_DEBUG=true

và mở laravel / config / app.php và thay đổi

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

đến

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

để bạn có thể tìm ra lý do gây ra lỗi của bạn là gì.


4
Không có lý do gì bạn nên chỉnh sửa config / app.php như vậy. Điều này sẽ phủ nhận toàn bộ mục đích của tệp .env.
Nathan

Tôi gặp lỗi Dịch vụ nội bộ khi chạy ứng dụng laravel trên máy chủ thử nghiệm của mình (ở chế độ sản xuất). Đặt APP_DEBUG = true cho phép tôi xem chi tiết của lỗi, vì vậy tôi có thể tìm và khắc phục sự cố.
Debbie V

3

Chạy hai lệnh này trong thư mục nơi Laravel được cài đặt:

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

Sau đó, xóa bộ nhớ cache và kết xuất tải tự động:

php artisan cache:clear
composer dump-autoload

3

Tôi đã phải đối mặt với vấn đề này nhiều lần. Hãy thử một trong những bước này, nó đã giúp tôi rất nhiều. Có lẽ nó cũng sẽ giúp bạn.

  1. Trước hết hãy kiểm tra quyền đối với tệp của bạn.
  2. Để sửa quyền tệp sudo chmod 755 -R your_project
  3. Sau đó chmod -R o + w your_project / storage để ghi tệp vào thư mục lưu trữ.
  4. php bộ nhớ cache nghệ nhân: xóa trình
    soạn nhạc dump-autoload
  5. khóa nghệ nhân php: tạo
  6. Sau đó kiểm tra yêu cầu máy chủ theo yêu cầu của laravel.
  7. Nhiều khi bạn gặp lỗi này do phiên bản php . Hãy thử thay đổi phiên bản php của bạn trong cpanel.
  8. Sau đó, định cấu hình tệp .htaccess của bạn đúng cách

3

Tôi đọc tất cả các bình luận và đề xuất. 500 - MÃ LỖI HTTP đại diện cho lỗi máy chủ nội bộ.

Lý do cho lỗi này:

  • Nguyên nhân chủ yếu là do vấn đề về quyền
  • Không tìm thấy biến môi trường hoặc .envkhông tìm thấy tệp trên thư mục gốc của bạn
  • Vấn đề về phần mở rộng PHP
  • Sự cố cơ sở dữ liệu

Sửa chữa:

  • Đặt các quyền chính xác:
    • Chạy các lệnh này (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
  • Nếu tệp .env không tồn tại, hãy tạo từng biến một touch .envvà dán các biến môi trường của bạn rồi chạy
   php artisan key:generate
   php artisan cache:clear
   php artisan config:clear
   composer dump-autoload
  • Kiểm tra tệp php.ini của bạn và bỏ ghi chú các phần mở rộng bạn cần (Trong một số trường hợp, bạn phải cài đặt phần mở rộng bằng cách chạy lệnh này apt-get install php7.2-[extension-name]
  • Kiểm tra thông tin xác thực và giá trị cơ sở dữ liệu của bạn trong .envtệp. Và cấp quyền cho người dùng cơ sở dữ liệu đối với cơ sở dữ liệu đó.

Đây là một số vấn đề phổ biến mà bạn có thể sẽ gặp phải khi triển khai ứng dụng laravel của mình và một vấn đề bạn bắt đầu nhận được tất cả các lệnh này, tôi khuyên bạn nên tạo một tập lệnh sẽ tiết kiệm thời gian của bạn.


2

Nếu bạn sử dụng vagrant, hãy thử cách này:

Đầu tiên, xóa config.php trong current / nhà cung cấp.

Chạy lệnh sau:

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

KHÔNG CHẠY cấu hình nghệ nhân php: bộ nhớ cache.

Hy vọng điều này giúp đỡ.


1

Chạy hai lệnh này trên thư mục gốc của laravel

tìm * -type d -print0 | xargs -0 chmod 0755 # cho các thư mục

tìm thấy . -type f -print0 | xargs -0 chmod 0644 # cho tệp


1

Tôi gặp sự cố tương tự với Máy chủ chia sẻ. Tôi đã gặp lỗi 500. Tôi vừa sửa bằng cách kiểm tra phiên bản Laravel và phiên bản PHP. Lỗi là do Laravel 5.6 không chạy trên PHP 7.0.x Khi tôi biết điều này, tôi chỉ cần cấu hình lại dự án thành Laravel 5.5 tương thích với PHP 7.0.x bây giờ mọi thứ đều ổn. Một lý do khác mà đôi khi tôi gặp sự cố là FTP tôi nhận được Tệp bị hỏng và phải tải dự án lên nhiều lần. Hy vọng sự giúp đỡ này trong tương lai Tôi không tìm thấy quá nhiều thông tin trong chủ đề này.


1

Đối với những người trong số các bạn, những người giống như tôi, vẫn có lỗi sau khi thử tất cả các câu trả lời khác:

Kiểm tra phiên bản apache php sử dụng, laravel mới nhất chỉ hoạt động với php7.1. Vì vậy, bạn phải:

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

hi vọng điêu nay co ich


1

nếu nó trên một máy chủ trực tiếp, hãy thử cái này

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

sau đó cũng đảm bảo rằng phiên bản php trong composer.json của bạn giống với phiên bản trên máy chủ của bạn.

Kiểm tra phiên bản php của bạn trong thiết bị đầu cuối của bạn bằng php -v


1

Đảm bảo rằng bạn đã chạy composer updatetrên phiên bản máy chủ của mình.


1

Đầu tiên nếu không có tệp .env trong kho lưu trữ laravel của bạn. Sao chép và dán tệp .env.example và đổi tên nó thành .env. sau đó mở tệp .env và trong phần cơ sở dữ liệu đưa ra mô tả cơ sở dữ liệu của bạn. Run: php Artian key: create php Artian cache: clear php Artian config: cache php Artian config: clear composer dump-autoload php Artian serve


0

Theo nhật ký:

[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

Có một số lỗi khi mở tệp vào thư mục / nhà cung cấp.

Bằng cách cài đặt và cập nhật thông qua trình soạn nhạc, cuối cùng tôi đã có thể giải quyết vấn đề.

sudo composer install
sudo composer update

0

Đảm bảo rằng thư mục lưu trữ với đặc quyền ghi (chmod o + w), hoạt động với tôi như một sự quyến rũ.



0

Tôi đã gặp phải sự cố này và đã khắc phục bằng cách nâng cấp phiên bản php của mình trong apache lên đến 5.6.x


0

Chỉ thay đổi quyền đối với thư mục web thông qua lệnh này:

sudo chmod 755 -R your_folder


0

Tôi vừa chạy lệnh sau:

php artisan passport:install

Tôi đang sử dụng hộ chiếu để chạy ứng dụng của mình hoàn toàn dựa trên API và Vue.js. Laravel hoạt động tốt nhưng mỗi khi tôi cố gắng đăng nhập qua API của mình, tôi sẽ gặp lỗi. Sau khi chạy lệnh và cập nhật client_id và client_secret trên các tệp Laravel của tôi, sau đó đẩy các bản cập nhật mới lên máy chủ trực tiếp, sự cố đã được giải quyết. Trong mô hình người dùng của tôi, tôi có một tập lệnh như sau:

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

Tôi chỉ cập nhật client_id và client_secret sau đó lưu lại. Vì lệnh passport cung cấp cho bạn hai khóa ứng dụng khách:

1) Ứng dụng khách truy cập cá nhân (client_id & client_secret)

2) Ứng dụng khách cấp mật khẩu (client_id & client_secret)

Tôi đã sử dụng ứng dụng khách cấp mật khẩu. Hy vọng điều này sẽ giúp ai đó ngoài kia :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.