Laravel - 当部署在子文件夹中时阻止 public 之外的文件访问
Laravel - prevent file access outside of public while deployment is in subfolder
我对 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 文件夹的符号链接。
通过上述方法,我可以使用 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>
如果有的话我还是想提一些建议。谢谢。
我对 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 文件夹的符号链接。
通过上述方法,我可以使用 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>
如果有的话我还是想提一些建议。谢谢。