无法提供目录 /var/www/html/public/ [Laravel - Aws Elasticbeanstalk]

Posted

技术标签:

【中文标题】无法提供目录 /var/www/html/public/ [Laravel - Aws Elasticbeanstalk]【英文标题】:Cannot serve directory /var/www/html/public/ [Laravel - Aws Elasticbeanstalk] 【发布时间】:2018-10-19 03:55:13 【问题描述】:

我一直试图在 Elasticbeanstalk 服务器上部署我的 Laravel 项目,但一直收到此错误:

前端错误:

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

日志文件中的错误:

无法提供目录 /var/www/html/public/:无匹配 找到 DirectoryIndex (index.html,index.php),并由服务器生成 Options 指令禁止的目录索引

我将 .htaccess 和 index.php 放在根目录而不是公共文件夹中。

.htaccess

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

    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]

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

.ebextensions/01-main.config

container_commands:
  01-optimize:
    command: "/usr/bin/composer.phar dump-autoload --optimize"
  02-migrations:
    command: "php artisan migrate --env=production"
  03-cache:
    command: "php artisan cache:clear"
    cwd: "/var/app/ondeck"
  04-optimize:
    command: "php artisan optimize --force"
    cwd: "/var/app/ondeck"
  05-permissions:
    command: "chmod 777 -R /var/app/ondeck"
    cwd: "/var/app/ondeck"
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_make_storage_writable.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      echo "Making /storage writeable..."
      chmod -R 777 /var/app/current/storage
      if [ ! -f /var/app/current/storage/logs/laravel.log ]; then
          echo "Creating /storage/logs/laravel.log..."
          touch /var/app/current/storage/logs/laravel.log
          chown webapp:webapp /var/app/current/storage/logs/laravel.log
      fi

      if [ ! -d /var/app/current/public/storage ]; then
          echo "Creating /public/storage symlink..."
          ln -s /var/app/current/storage/app/public /var/app/current/public/storage
      fi

  "/opt/elasticbeanstalk/tasks/publishlogs.d/laravel-logs.conf":
    mode: "000755"
    owner: root
    group: root
    content: |
      /var/app/current/storage/logs/*.log


  "/etc/httpd/conf.d/https_redirect.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      RewriteEngine on
      RewriteCond %HTTP:X-Forwarded-Proto ^http$
      RewriteRule .* https://%HTTP_HOST%REQUEST_URI [R=307,L]

.ebextensions/02-project.config

commands:
  01_update_composer:
    command: export HOME=/root && export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update

option_settings:
  - namespace: aws:elasticbeanstalk:application:environment
    option_name: COMPOSER_HOME
    value: /root
  - namespace: aws:elasticbeanstalk:application:environment
    option_name: HOME
    value: /root
  - namespace: aws:elasticbeanstalk:container:php:phpini
    option_name: document_root
    value: /public
  - namespace: aws:elasticbeanstalk:container:php:phpini
    option_name: memory_limit
    value: 512M
  - namespace: aws:elasticbeanstalk:sqsd
    option_name: HttpPath
    value: /worker/queue
  - namespace: aws:elasticbeanstalk:container:php:phpini
    option_name: zlib.output_compression
    value: Off
  - namespace: aws:elasticbeanstalk:container:php:phpini
    option_name: allow_url_fopen
    value: On
  - namespace: aws:elasticbeanstalk:container:php:phpini
    option_name: max_execution_time
    value: 4000

我们将不胜感激。

谢谢

【问题讨论】:

为什么你把.htaccess和index.php放在根目录下而不是放在public文件夹里? @Saurabh 如果我将 .htaccess 和 index.php 放入 /public 文件夹,我会收到此错误:Whoops, looks like something went wrong. 并且要访问该网站,我必须将公共文件夹添加到 url (www. example.com/public/)。 PHP Warning: require(/var/app/current/public/vendor/autoload.php): failed to open stream: No such file or directory in /var/app/current/public/index.php on line 24 你有没有解决过这个问题,现在遇到同样的问题,这是我过去多次使用的设置。 【参考方案1】:

这意味着您的服务器配置文件没有正确创建。

默认的配置文件根目录是“/var/www/html/public/”,但在你的服务器中没有这样的目录。

您需要执行以下操作。(关于apache服务器)

    您可以编辑默认配置文件 (/etc/apache2/site-available/default.conf) 并更改您的 laravel 公共文件夹的路径 或者您可以禁用默认配置文件(/etc/apache2/site-available 目录内的sudo a2dissite default.conf)并创建您自己的配置文件并启用它(sudo a2ensite laravel.conf)。 将 /public 和 /storage 文件夹权限更改为 sudo chmod -R 0777 /storagesudo chmod -R 0777 /public

【讨论】:

【参考方案2】:

这是你做的吗?

    打开 Elastic Beanstalk 控制台。

    导航到您的环境的管理页面。

    选择配置

    软件配置卡上,选择Modify

    对于文档根目录,键入 /public

    应用配置

参考:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/php-laravel-tutorial.html

【讨论】:

是的,文档根目录设置为 /public。但还是不行。 - namespace: aws:elasticbeanstalk:container:php:phpini option_name: document_root value: /public【参考方案3】:

您必须将公共文件夹的权限设置为 chmod 为 755

【讨论】:

我应该这样做吗:06-publicfolder: command: "chmod 755 -R /public"

以上是关于无法提供目录 /var/www/html/public/ [Laravel - Aws Elasticbeanstalk]的主要内容,如果未能解决你的问题,请参考以下文章

Apache 错误 (AH01276),无法提供目录 /var/www/project/:

无法提供目录 /var/www/html/public/ [Laravel - Aws Elasticbeanstalk]

Flutter:FAILURE:构建失败,出现异常无法创建任务':app:compileFlutterBuildDebug'。必须提供 Flutter 源码目录

hadoop 2.6.2,mkdir:无法创建代理提供程序 null

Colab 无法识别现有目录

无法使用 Ktor 提供静态内容