Laravel 在本地 ubuntu 20 中显示空白页

Posted

技术标签:

【中文标题】Laravel 在本地 ubuntu 20 中显示空白页【英文标题】:Laravel show blank page in local ubuntu 20 【发布时间】:2021-12-11 23:33:10 【问题描述】:

我正在使用 ubuntu 20,laravel 项目使用 php artisan serve 运行,但是当我使用此 URL laravel-local.com 访问该站点时,它显示空白页

无法得到任何错误

网站可用

 <VirtualHost *:80>
  ServerAdmin admin@MyWebsite.com
  DocumentRoot /var/www/html/laravel-local.com/public
  ServerName laravel-local.com

  <Directory /var/www/html/laravel-local.com/public>
     Options +FollowSymlinks
     AllowOverride All
     Require all granted
  </Directory>

  ErrorLog $APACHE_LOG_DIR/error.log
  CustomLog $APACHE_LOG_DIR/access.log combined
</VirtualHost>

我尝试了什么

    授予项目 777 访问权限 更改所有权 删除存储/框架内的文件夹 更改存储文件夹权限 composer dump-autoload、php artisan 缓存和配置清除 删除公用文件夹中的 .htaccess 文件

我尝试了以上所有步骤仍然是一个空白页

根文件夹中的.htaccess 文件

<IfModule mod_rewrite.c>

RewriteEngine  On
RewriteRule ^(.*)$ public/$1 [L]

</IfModule>

公用文件夹中的.htaccess

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

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ index.php [L]

# Handle Authorization Header
RewriteCond %HTTP:Authorization .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]
</IfModule>

【问题讨论】:

这是您拥有的唯一.htaccess 文件吗?它到底在哪里?您收到的 HTTP 响应是什么? 有2个.htaccess文件,一个在根目录,一个在public目录 根据您的 vHost 配置,/public 文件夹是“根文件夹”。这就是我在回答中提到的。您的特定配置不需要两个 .htaccess 文件。 你怎么知道响应空白页的是“Laravel”而不是 Apache? HTTP 响应代码是什么?服务器的错误日志是否报告了什么? 您可以从浏览器开发工具的“网络”选项卡中获取状态代码。 (这确实是帮助诊断此类问题的第一个位置。) 【参考方案1】:
<IfModule mod_rewrite.c>

RewriteEngine  On
RewriteRule ^(.*)$ public/$1 [L]

</IfModule>

您不需要像这样的.htaccess 文件(需要进入/public 目录上方 的目录中),因为您已经将/public 目录配置为DocumentRoot 在服务器配置中。

如果您还删除了/public 子目录中的.htaccess 文件,那么这将导致重写循环(500 错误)。

您只需要文档根目录中的标准 Laravel 前端控制器(.htaccess 文件),即。在/public 子目录中。

但是,您应该在 vHost(&lt;Directory&gt; 容器)或 Laravel 主文件的顶部(.htaccess 内)定义 DirectoryIndex(如果尚未在服务器配置中设置) 987654333@ 文件夹)。如果没有定义,那么对 Laravel 目录本身(主页)的请求将不会通过 Laravel 路由,并且可能会导致来自 Apache 的 403 Forbidden 响应(或者更糟的是,如果启用了Indexes,则会出现目录列表)。

例如:

DirectoryIndex index.php

【讨论】:

你的意思是删除根目录下的.htaccess文件? 是的,但您似乎称之为“根目录”的目录实际上是 (文档)根目录的目录。您只需要/public 目录(现在是服务器配置定义的“根目录”)中的.htaccess 文件。您还需要在某处定义DirectoryIndex。我已经更新了我的答案。如果未定义,则访问根目录时会收到 403。 在顶部的public/.htaccess中添加这一行,空白页显示 laravel-local.com/index.php/login 显示(空白页面),但是当我使用 laravel-local.com/login 访问该页面时,它显示 404(在此服务器) 这种行为与.htaccess(即mod_rewrite)不做任何事情一致 - 您的服务器上是否安装了mod_rewrite?您应该删除 &lt;IfModule mod_rewrite.c&gt; ... &lt;/IfModule&gt; 包装器 - 是否出现错误?

以上是关于Laravel 在本地 ubuntu 20 中显示空白页的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu 14.04 上的 Laravel 5.1 本地主机错误

我在 Ubuntu 20.04 上收到“laravel:找不到命令”

尝试在 ubuntu 20.04 上安装 php-mbstring

Laravel Sail 不会在 Ubuntu 20.04 上构建 - groupadd:无效的组 ID 'sail'

在 laravel 应用程序、Apache、Ubuntu 20.04 上安装 Certbot 软件并配置 HTTPS 后 HTTPS:// 链接断开 |数字海洋

Laravel 无法在 Ubuntu 14 中打开流警告