Laravel 拒绝访问 /public 目录
Posted
技术标签:
【中文标题】Laravel 拒绝访问 /public 目录【英文标题】:Laravel deny access to /public directory 【发布时间】:2021-10-19 11:27:33 【问题描述】:有人可以回答我: 在 laravel 中是否可以拒绝访问公用文件夹中的目录? 我了解公共目录中的所有内容都是公开的。但我需要在 /public 目录中放置一个文件夹,并将 index.html 文件放在其中,其中包含一些 css、js、图像。我需要正确显示 index.html 并防止未经授权的用户查看它。 如果有任何答案,我将不胜感激。
【问题讨论】:
【参考方案1】:尝试根据您的要求设置该特定文件夹的权限。
简单设置:
chmod -R 权限文件夹路径/文件夹名称
您可以查看此链接以了解用于哪些权限的组合。 chmodcommand.com
【讨论】:
【参考方案2】:问题是,/public
中的静态文件不是由 laravel 处理的,而是由您的服务器软件直接提供的。
如果您使用的是 apache2,您可以拒绝访问公共子文件夹,您可以在拒绝访问的目录中放置 .htaccess
文件:
public/custom/.htaccess
order deny,allow
deny from all
问题是,除非您使用基本身份验证,否则您无法授权外部访问这些文件。
为了处理复杂的授权并且不破坏 laravel 约定,我会将这些文件放在resources
(甚至storage/app
)内的文件夹中
resources
| custom
| | index.html
| | image.png
| | script.js
| | style.css
然后,在您的 web.php
中为原始文件夹中的所有内容创建通用路由:
Route::get('/custom/file?', [CustomFilesController::class, 'getFile'])
在控制器/路由内部,您可以:
执行您的授权 从资源(或存储)文件夹中检索文件 使用适当的内容类型标头响应它们【讨论】:
非常感谢您的详细解答!至于目录 /public,我知道所有内容都在公共访问中,laravel 无法控制它。至于将文件夹放在不同的目录中,我已经这样做了。例如,放在目录/storage 中。但问题是css、js和图片文件没有显示,返回404错误。也许我没有正确地提供 index.html 文件。使用方法:File::get($path . '/index.html')
这样你只提供 index.html 文件。您应该收到所需的文件名作为输入并相应地返回以上是关于Laravel 拒绝访问 /public 目录的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:SQLSTATE [28000] [1045] 用户 'homestead'@'localhost' 的访问被拒绝
用户 'user'@'localhost' Laravel 5.8 的访问被拒绝
在 laravel 5 中,用户 'homestead@localhost' 的访问被拒绝
在 laravel 4.2 中,用户 'root'@'localhost' 的 Laravel 访问被拒绝(使用密码:YES)