Laravel 在共享主机上给出 500 内部错误

Posted

技术标签:

【中文标题】Laravel 在共享主机上给出 500 内部错误【英文标题】:Laravel giving 500 internal error on Shared hosting 【发布时间】:2019-09-20 13:37:16 【问题描述】:

我有一个 laravel 应用程序在我的本地机器上运行良好。我刚刚将它转移到我的服务器(共享主机),并将所有内容放在 public_html 的公用文件夹中,并将其他所有内容放在 public_html 上方的一个步骤中。现在的问题是它在每条路线上显示 500 内部错误。我已将 .htaccess 代码更改为文档中的给定代码,存储和引导的文件夹权限设置为 777。

错误日志中没有任何内容,laravel 日志文件中也没有任何内容。当我安装新的 laravel 安装时,它也可以在服务器上运行。尝试用我的项目更新代码,但仍然出现 500 个内部错误。

【问题讨论】:

请检查您的存储日志文件。 尝试更改应用程序的公共路径。检查你的 server.php 文件 【参考方案1】:

Laravel 默认的 .htacces 不适用于 IONOS。 这是完美的 .htaccess

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews -Indexes
</IfModule>

RewriteBase /
Options +FollowSymLinks
RewriteEngine On

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

# Send Requests To Front Controller...
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ index.php [L]
</IfModule>

【讨论】:

【参考方案2】:

对于 Laravel 8 / IONOS 托管服务器,这对我有用:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteBase /
    Options +FollowSymLinks
    RewriteEngine On

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

    # Send Requests To Front Controller...
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %REQUEST_FILENAME !-f
    RewriteRule ^ index.php [L]
</IfModule>

【讨论】:

感谢帮助我。所以基本上这里添加了 RewriteBase / 和 Options + FollowSymLinks。剩下的是“Laravel 8 默认”【参考方案3】:

如果您使用的是 IONOS(或 1and1,可能也适用于其他...),.htaccess 文件应该与 laravel 公共目录中的默认文件不同。

用这个替换它的内容:

RewriteBase /

Options +FollowSymLinks
RewriteEngine On

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

【讨论】:

你是救生员。实际上这一行是最重要的:RewriteBase /。我将使用适用于 Laravel 8 的 IONOS 的有效 .htaccess 更新答案。【参考方案4】:

错误可能是由于.env文件的配置。因为你的问题不够清楚。所以我将解释2种方法

带有供应商和 .env 文件(不推荐) - 解压缩主 zip 文件并上传您的 public_html 文件夹(上传 供应商文件夹)

给 storage/ 和 bootstrap/ 文件夹 777 递归权限

在phpmyadmin中创建数据库并导入.sql文件

在 .env 文件中设置数据库

现在通常对于所有共享主机,您都将使用 SSH,您可以联系主机提供商以获取其详细信息。

一旦你获得访问权限,使用命令

php artisan cache:clear
php artisan config:clear
php artisan config:cache

文件本身可以在 bootstrap/cache/config.php 中找到。

请注意,编译的配置文件的位置最近发生了变化。您的也可能在 vendor/config.php 或 storage/framework/config.php 中。全新安装或运行 composer update 文件应该在 bootstrap/cache 中。

现在直接来自 GIT 或其他无供应商的来源(推荐)

确保复制所有项目文件,包括隐藏文件 (.env)。

如果您使用 GIT,请使用 GIT clone 克隆项目。

检查您在 php.ini 中是否拥有所有必要的 PHP 扩展,如 Laravel 要求中一样。另外,请注意您的 PHP 版本!

安装作曲家https://getcomposer.org/doc/00-intro.md

复制后,转到您的目标文件夹并运行 composer install

运行 php artisan key:generate from the command line.

然后运行

php 工匠缓存:清除

php 工匠配置:清除

php 工匠配置:缓存

http://php.net/manual/en/install.windows.commandline.php

确保您的网络服务器正在为项目/公共文件夹中的页面提供服务。

即使在完成这些步骤后,如果 Laravel 仍然显示错误,请检查 your_project/storage/logs/laravel.log

【讨论】:

以上是关于Laravel 在共享主机上给出 500 内部错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 表单返回,共享主机上的 500 服务器错误

动态虚拟主机使用 Laravel 给出 500 错误

Laravel 得到 500 内部服务器错误

如何在共享主机上部署 laravel websockets?

Lumen 在发布时给出带有 500 内部错误的空白页

500(内部服务器错误)在 Laravel 5 中使用 Ajax