Laravel - 当部署在子文件夹中时阻止 public 之外的文件访问

Laravel - prevent file access outside of public while deployment is in subfolder

我对 laravel 比较陌生,所以如果这是一个不好的做法,请原谅我。 我有一个 godaddy 域可以说 example.com 指向我的 ec2 实例。 我有 2 个项目 example.com 网站和管理员。 所以我的文件夹结构是

我想将 example.com 指向 /website,所以我通过虚拟主机管理它,如下所示

<VirtualHost *:443>
  ServerName example.com
  DocumentRoot "/var/www/html/website"
</VirtualHost>

这按预期工作。

现在我想通过 example.com/admin
访问管理面板 为此,我在 /website 中创建了指向 /admin 文件夹的符号链接。
通过上述方法,我可以使用 example.com/admin/public 访问管理员,这符合我的预期,因为所有用户都已经在使用 /public url.
现在的问题是,当我在没有 public 的情况下访问 example.com/admin/ 时,它会显示 public 之外的所有文件,而且我可以使用 url 查看 .env 文件。我怎样才能避免这种情况?

在虚拟主机配置中,通过Options指令限制列表

DocumentRoot "/var/www/html/website"
<Directory "/var/www/html/website">
    Options -Indexes +FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

此外,在虚拟主机配置中,您还可以像这样public限制单个文件的访问

<Files composer.json>
    <IfVersion < 2.4>
        order allow,deny
        deny from all
    </IfVersion>
    <IfVersion >= 2.4>
        Require all denied
    </IfVersion>
</Files>

<Files .env>
    <IfVersion < 2.4>
        order allow,deny
        deny from all
    </IfVersion>
    <IfVersion >= 2.4>
        Require all denied
    </IfVersion>
</Files>

嗯,我找到了一个很好的解决方案
首先,我添加了包含以下行的 .htaccess 文件

RewriteEngine On 
RewriteRule ^ public [L]

这会将所有内容重定向到 /public

其次,为了额外的安全,我使用

限制了对 .env 文件的访问
<Files .env>
order allow,deny
Deny from all
</Files>

如果有的话我还是想提一些建议。谢谢。