如何解决Laravel - 当部署在子文件夹中时,防止公共之外的文件访问
我对 Laravel 比较陌生,如果这是一个不好的做法,请原谅我。 我有一个godaddy 域,可以说example.com,它指向我的ec2 实例。 我有 2 个项目 example.com 网站和管理员。 所以我的文件夹结构是
- /var/www/html
- 网站
- 管理员
我想将 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>
如果有的话,我还是想提出一些建议。谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。