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.json
的 script
部分
"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 bash
到ls -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/" > 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相比