在Laravel 5+ Ubuntu 14.04上出现500个内部服务器错误


85

我已经在Windows OS上安装了Laravel多次,但从未发生过此类问题。当您的“ mod_rewrite”模块未打开时,通常会出现这500个内部服务器。

但是,在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
MikeRockétt2015年

1
“我已经安装了rewrite_mod但...”-并允许AllowOverride在服务器配置中使用.htaccess进行适当的访问?
MrWhite 2015年

@MikeRockett我最近删除了“选项”,将其保留为浏览器空白,不保留它则返回500请求错误,但在两种情况下浏览器均返回500错误。!
DpEN

1
@MikeRockett ..我从index.php文件中删除了“ /../”,并尝试显示了文件权限的不同错误,然后使用chmod并设置了读/写权限,它起作用了!!!感谢帮助兄弟!
DpEN

Answers:


214

终于克服了这个问题

  • 不是问题的.htaccess文件还是index.php。问题出在访问文件并需要权限。

为了解决这个问题,我通过终端运行了以下命令。

sudo chmod -R 755 laravel_blog

然后在下面键入以允许laravel将文件写入存储文件夹

chmod -R o+w laravel_blog/storage

这两个命令解决了这个问题。


1
谢谢,在将laravel安装到Google计算引擎上的全新ubuntu 14.04发行版时遇到了这个问题,此问题已解决。
亚历克斯(Alex)

1
谢谢你 这解决了ubuntu和mac上的问题。
Arunabh Das

2
这是一个非常糟糕的建议,chmod将所有文件设置为+ x。我假设您想对目录执行此操作,在这种情况下,您将使用find。
MightyPork '16

我应该在哪里cd(更改目录)以执行该命令?
阿纳斯塔西·洛朗

1
您需要许多Cookie。在LAMP Ubuntu 16.04 Digital Ocean上运行良好。
Abhishek Saini

71

创建.env文件并运行:

php artisan key:generate

在拉动git项目后,这对我有用。

创建.env文件并生成密钥后,运行以下代码:

php artisan cache:clear 
php artisan config:clear

3
这对我有用。不要犯一个新手错误,安装laravel项目后,请确保将.env.example重命名为.env或php artisan键:generate将崩溃
Armin

好的,这是新事物吗?第一次遇到这个问题
罗伯特·罗查

1
php artisan cache:clear php artisan config:clear正在为我的案子工作
努尔卡蒂科


20

尝试检查您是否有.env文件。

通常,这件事会导致类似的事情。尝试创建一个文件,然后从中复制所有内容.env.example,将其粘贴到创建的文件中并命名.env。或jsut只需将.env.example文件重命名为.env并运行php artisan key:generate


首次尝试时提供帮助+
AZinkey

14

确保根目录中包含一个包含APP_KEY的.env文件。

.env中应包含的内容尚未在其他解决方案中明确说明,我认为我可以将其归结为上面的句子。

这修复了我在全新安装的Laravel上的500错误。

脚步:

  1. 在根目录中创建一个.env文件(例如touch .env
  2. 确保它至少包含一行: APP_KEY=
  3. 在终端中生成一个应用程序密钥: php artisan key:generate

笔记:

  • 我的特定安装不包含任何.env(示例或其他方式)

  • 仅使用空白.env无效。

  • 包含参数但没有APP_KEY参数的.env无效。

错误?:在终端中生成应用程序密钥时,它可能会报告为成功,但是如果文件中不存在任何密钥,则实际上不会将其放入.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是一个非常糟糕的命令,它将使Internet上的任何人都能获得WRITE访问权限。644是更可取的。
扎克·格里森

9

也许可以解决这个问题:

通过从项目的根目录运行composer命令来安装所需的软件包:

sudo composer install

更新:

  • 您不应在生产服务器上运行此命令,但是可以在本地envs上解决composer的某些问题。

编辑:


1
这到底是什么,你真的知道你在回答什么!
Jimmy Obonyo Abor,2016年

3
@JimmyObonyoAbor实际上这是工作。根据日志,500是因为/ vendor中的某些文件丢失。您如何解决?通过运行作曲家安装/更新。感谢和支持,克里斯托斯·
帕波拉斯

5
我相信使用sudo运行该命令是一个潜在的安全漏洞
Shay

5

我安装了PHP 7.0和PHP 7.1,并且在命令行上使用PHP 7.1,并且在Apache上启用了PHP 7.0,当您将Laravel Framework和localhost Apache2与laravel一起使用时,可能会带来麻烦。

首先检查您的作曲家文件以查看您的PHP版本。

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

在命令行上检查您当前的php版本

php -v

检查您当前在Apache上启用的php版本,我确实使用浏览器。

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可以查看错误的详细信息,因此我可以查找并解决问题。
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的工匠缓存:清除
    作曲家转储自动加载
  5. PHP的工匠键:生成
  6. 然后根据laravel要求检查服务器要求。
  7. 很多时候由于php版本而出现此 错误尝试在cpanel中更改您的php版本
  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

共享主机存在类似问题。我遇到500错误。我只是通过检查Laravel版本和PHP版本来解决。错误是因为Laravel 5.6不能在PHP 7.0.x上运行,一旦我知道了这一点,我就将项目重新配置为与PHP 7.0.x兼容的Laravel 5.5,现在一切正常。有时我遇到问题的另一个原因是FTP我的文件损坏,并且必须多次上传项目。希望以后能帮到我,在本主题中找不到太多信息。


1

对于像我这样的人,在尝试了所有其他答案后仍然出错:

检查apache使用的php版本,最新的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]

然后还要确保composer.json中的php版本与服务器的版本相同。

使用以下命令在终端中检查您的php版本 php -v



1

首先,如果您的laravel存储库中没有.env文件。复制并粘贴.env.example文件,然后将其重命名为.env。然后打开.env文件,并在数据库部分给出您的数据库描述。运行:php artisan键:生成php artisan缓存:clear php artisan config:缓存php artisan config:clear composer dump-autoload php artisan服务


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文件夹中打开文件有些失败。

通过composer安装和更新,我终于可以解决问题。

sudo composer install
sudo composer update

0

确保具有写权限(chmod o + w)的存储文件夹,对我来说就像一个魅力。





0

我只是运行以下命令:

php artisan passport:install

我使用护照完全基于API和Vue.js运行我的应用程序。Laravel工作正常,但是每次我尝试通过API登录时都会收到错误消息。在运行命令并更新了我的Laravel文件上的client_id和client_secret之后,将新更新推送到了实时服务器中,问题得以解决。在我的用户模型中,我有一个脚本,如下所示:

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,然后才保存。由于passport命令为您提供了两个客户端密钥:

1)个人访问客户端(client_id和client_secret)

2)密码授予客户端(client_id和client_secret)

我使用了密码授予客户端。希望这可以帮助某人:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.