【问题标题】:Laravel show blank page in local ubuntu 20Laravel 在本地 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>

我尝试了什么

  1. 授予项目 777 访问权限
  2. 更改所有权
  3. 删除存储/框架内的文件夹
  4. 更改存储文件夹权限
  5. composer dump-autoload、php artisan 缓存和配置清除
  6. 删除公用文件夹中的 .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 响应代码是什么?服务器的错误日志是否报告了什么?
  • 您可以从浏览器开发工具的“网络”选项卡中获取状态代码。 (这确实是帮助诊断此类问题的第一个位置。)

标签: laravel apache .htaccess ubuntu


【解决方案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; 包装器 - 是否出现错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
  • 2015-11-30
  • 2017-07-16
相关资源
最近更新 更多