Laravel Public 文件夹可在 LAMP 服务器上访问

Laravel Public folder accessible on LAMP server

我急需帮助在 LAMP 服务器上设置我的 laravel 项目。 到目前为止,我已经在我的本地主机 xampp 服务器上测试了我的 "Pretty URLs",没有任何问题。现在我正尝试在实际的 LAMP 服务器上设置它,我 运行 遇到了问题

到目前为止,我已经安装了 LAMP 服务(Ubuntu、Apache2、MYSQL、PHP5(使用 curl 和 mcrypt))。目前我的 laravel 项目在我的主目录中,带有指向 /var/www/html 文件夹中的 public 文件夹的符号链接,就像这样... project, symlink.

我已将 /etc/apache2/apache2.conf 更改为以下配置

<Directory />
       Options FollowSymLinks
       AllowOverride None
       Require all denied
</Directory>

<Directory /usr/share>
       AllowOverride None
       Require all granted
</Directory>

<Directory /var/www/html>
      Options Indexes FollowSymLinks
      AllowOverride All
      Require all granted
</Directory>

然后我使用命令 sudo a2enmod rewrite 并按照 laravel 文档中的说明编辑了我的 .htaccess 文件。

最后,我重新启动了我的 apache 服务:sudo service apache2 restart,当我尝试转到 "mydomain.com/public" 时,我收到 403 禁止错误。

有没有人可以帮助我?

关于Apache配置,好像没问题。我更喜欢禁用索引(以防止目录列表)和多视图(以防止隐式文件名模式匹配)。

<Directory /var/www/html>

    Options +FollowSymLinks -MultiViews -Indexes
    AllowOverride All
    Require all granted

    #some general directives could be handy here also
    <FilesMatch "\.(png|jp?g|gif|ico|mp4|wmv|mov|mpeg|css|map|woff?|eot|svg|ttf|js|json|pdf|csv)">
            ExpiresActive on
            ExpiresDefault "access plus 2 weeks"
    </FilesMatch>

</Directory>

问题似乎与权限有关。 默认情况下 Apachewww-data:www-data 运行。这可以在 envvars 中更改(更改后应 Apache 重新启动)或作为编译时选项提供。 /etc/apache2/envvars

...
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
...

不过,更好的方法是

  • sudo chown :www-data /var/www/html
  • /var/www/html组改为www-data
  • sudo chmod 2770 /var/www/html/var/www/html的模式改为2770。由于 Apache 需要执行权限才能访问该目录。递归地将此命令应用于其他目录
  • 将您的 public 目录静态文件的模式更改为 2660 以采取安全措施