Laravel - 当部署在子文件夹中时,防止公共之外的文件访问

问题描述

我对 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 指向 /admin 文件夹。
通过上述方法,我可以使用 example.com/admin/public 访问 admin,这符合我的预期,因为所有用户都已经在使用 /public url。
现在的问题是,当我在没有公开的情况下访问 example.com/admin/ 时,它显示了公开之外的所有文件,并且我还可以使用 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>

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

<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>

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