Heroku 上的 Laravel 5.4。 Forbidden 您无权访问此服务器上的 /

Posted

技术标签:

【中文标题】Heroku 上的 Laravel 5.4。 Forbidden 您无权访问此服务器上的 /【英文标题】:Laravel 5.4 on Heroku. Forbidden You don't have permission to access / on this server 【发布时间】:2018-05-17 02:54:54 【问题描述】:

我已经在 Heroku 上部署了我的 laravel 5.4 应用程序。问题是,我收到此错误消息:

禁止 您无权访问此服务器上的 /

我的档案:

web: vendor/bin/heroku-php-apache2 public/

查看日志,我发现它一直在尝试 'app/' 而不是 '/'。

我的日志,为了便于阅读而剪掉了。

2017-12-03T14:18:45.747195+00:00 app[web.1]: [Sun Dec 03 14:18:45.746749 2017] [autoindex:error] [pid 122:tid 140692458305280] [client 10.140.221.43:41026] AH01276: Cannot serve directory /app/: No matching DirectoryIndex (index.php,index.html,index.htm) found, and server-generated directory index forbidden by Options directive

我的 .htaccess:

<IfModule mod_rewrite.c>
    <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
    RewriteC

我不知道我可能会说它在哪里查看 'app/' 而不是 '/'。如果这是导致此错误的原因。

【问题讨论】:

【参考方案1】:

/app 是应用程序所在文件系统上的绝对路径。该错误表明您的 Procfile 实际上并不包含您声称的内容。您可能尚未将其添加并提交给 Git。 Apache 目前正在尝试从“根”而不是 public/ 子目录提供服务。

【讨论】:

【参考方案2】:

我不知道为什么服务器认为您的根目录位于 /app,但由于 Heroku 应该为您的应用程序提供服务的 public/ 目录的权限,会发生此错误。

要解决此问题,只需将以下内容添加到您的 composer.jsonscript 部分

 "post-install-cmd": [
     "php artisan clear-compiled",
     "chmod -R 777 public/"
 ]

注意public/目录的权限变化。

编辑:

当您使用它时,请检查您的Procfile,确保拼写正确并以大写P 开头。

PS:我知道有些人真的很挑剔,会说许可太宽松了。是的,我同意你的看法。您可以将其更改为 775 之类的其他内容,让我们尽情享受吧。

【讨论】:

我已将以下代码添加到我的 composer.json。我还找到了一个解决方案 [***.com/questions/31704032/…,它说要正确命名 Procfile。但我仍然有错误消息 请检查您的 Procfile 名称的拼写。确保拼写正确并以大写 P 开头。 我还尝试了“chmod -R 777 app/storage”,通过添加 cmd 命令来获得存储目录的权限,显示相同的错误。 我也试过这个解决方案,但错误仍然存​​在。 @trustidkid 我也是【参考方案3】:

创建这个 .htaccess 文件并将其放入您的 laravel 安装文件夹中。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %REQUEST_URI !^public
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

解决方案在这里:enter link description here

【讨论】:

谢谢,这对我在 Heroku 上托管的 Laravel 7.x 有效。【参考方案4】:

在 Laravel 根文件夹中,创建一个名为 Procfile 的文件。

在 Procfile 中写入以下行。

web: vendor/bin/heroku-php-nginx public/

然后再次部署它! Src 和更多在这里https://appdividend.com/2018/04/17/how-to-deploy-laravel-project-on-heroku/

希望这有帮助 =)

【讨论】:

要生成这个,请确保您使用的命令与项目目录中的 [echo web: vendor/bin/heroku-php-apache2 public/ > Procfile] 完全相同,不带任何引号。引号确实会导致此错误。【参考方案5】:

我今天遇到了同样的问题,并找到了一个简单的解决方案。我正在 Heroku 上运行 Laravel 6 应用程序。

问题是在我设置 HTTPS 重定向后开始的,方法是添加一个 apache 配置文件,并使用 Heroku Procfile 中的 -C 选项加载它:

web: vendor/bin/heroku-php-apache2 -C apache.conf public/

我收到的错误:

2020-01-13T03:55:29.272349+00:00 app[web.1]: [Mon Jan 13 03:55:29.271704 2020] [autoindex:error] [pid 127:tid 140227477751552] [client 10.213.231.122:26179] AH01276: Cannot serve directory /app/public/: No matching DirectoryIndex (index.html) found, and server-generated directory index forbidden by Options directive

所以和你遇到的问题一样。我发现,当您在 Heroku 上使用自定义配置启动 apache 时,它​​会开始寻找 index.html 文件,而不是 index.php 文件。

为了解决这个问题,我在我的 apache 配置文件中添加了以下行:

DirectoryIndex index.php

这会指示 apache 查找 index.php,并修复问题。

【讨论】:

【参考方案6】:

即使我遵循了标记为正确的答案,此错误仍然存​​在 (即使我已经运行heroku run bashls -l 来查看文件权限) 但我仍然收到此错误,这可能是因为我使用的是不同的本地分支而不是本地主分支,所以我的建议是始终从本地主分支部署,并且当我从另一个分支部署时,我会收到此日志将代码推送到heroku

 NOTICE: No Procfile, using 'web: heroku-php-apache2'

【讨论】:

【参考方案7】:

在 Heroku 上部署我的 Laravel 应用程序时,我遇到了同样的问题。我试图更改我的作曲家文件中/的权限,但这没有帮助。相反,我将此添加到我的 htaccess 文件中:

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

将此推送到 Heroku 解决了问题。

【讨论】:

【参考方案8】:

解决步骤:

    将您的项目克隆到您的 PC: heroku git:clone -a your-app-name

    创建文件名:Procfile

    然后保存Procfile中的以下代码行: web: vendor/bin/heroku-php-apache2 public/

    使用 commed 将您的项目部署回 heroku: $ git add . $ git commit -am "make it better" $ git push heroku master

    我希望现在运行你的 Laravel 应用程序没有问题!

【讨论】:

【参考方案9】:

我使用echo "web: vendor/bin/heroku-php-apache2 public/" &gt; Procfile 命令创建了Procfile,就像docs 告诉我的那样,但随后它在引号内生成了Procfile 命令。这就是为什么,即使我按照其他用户的建议修改了我的 composer.json 文件,我仍然会收到 403 禁止错误。

各位,请确保Procfile 中的命令没有被引号括起来。然后,修改composer.json 就像建议的批准答案并重新部署您的站点。

【讨论】:

【参考方案10】:

我删除了 procfile 文件文本周围的引号,它可以工作

【讨论】:

【参考方案11】:

如果还有人遇到此问题,请确保将 procfile 命名为 Procfile,大写为 P

【讨论】:

以上是关于Heroku 上的 Laravel 5.4。 Forbidden 您无权访问此服务器上的 /的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4 上的示例 PHPUnit 测试失败并显示 404

新 Laravel 5.4 上的“npm run dev”命令出错

用于删除sql行的按钮:Laravel 5.4上的BadMethodCallException

markdown PHP 5.6性能基准与Laravel 5.4上的PHP 7相比

PHP 7.0 上的 Laravel 5.4:PDO 异常 - 找不到驱动程序 (MySQL)

禁止在 heroku 中托管 laravel 应用程序时,您无权访问此 xampp 服务器上的 /