【发布时间】:2016-09-27 04:39:34
【问题描述】:
我正在将 Laravel 用于网络应用程序。上传了生产上的所有东西,发现有些文件可以通过url直接访问-例如http://example.com/composer.json
如何避免直接访问?
【问题讨论】:
我正在将 Laravel 用于网络应用程序。上传了生产上的所有东西,发现有些文件可以通过url直接访问-例如http://example.com/composer.json
如何避免直接访问?
【问题讨论】:
将您的网络服务器指向一个公共目录并重新启动它。
对于 Apache,您可以使用以下指令:
DocumentRoot "/path_to_laravel_project/public"
<Directory "/path_to_laravel_project/public">
您也可以拒绝 .htaccess 中的文件。
<Files "composer.json">
Order Allow,Deny
Deny from all
</Files>
对于多个文件,您可以在 .htaccess 文件中多次添加上述文件标签。
【讨论】:
只需创建空白
index.php
配置目录下的文件,并根据需要在文件中写入消息通知访问者用户
例如。服务器禁止访问
【讨论】:
Options -Indexes 添加到 .htaccess 文件中。
将 Web 服务器指向项目根文件夹中的公共目录
project root folder/public
但如果您没有公用文件夹并且您已经指向根文件夹,您可以通过在.htaccess 文件中写入以下代码来拒绝访问。
<Files ".env">
Order Allow,Deny
Deny from all
Allow from 127.0.0.1
</Files>
在上面的代码中,首先我们拒绝所有,只允许从自己的服务器(本地主机到服务器)执行,因此我们可以保护它不受外部用户的影响。
【讨论】:
使用 Apache,你可以在 Laravel 项目的根目录下创建 .htaccess 文件,将所有请求重写到 public/ 目录。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
【讨论】:
您也可以拒绝 .htaccess 中的文件。
<Files "composer.json">
Order Allow,Deny
Deny from all
</Files>
【讨论】:
您使用了错误的网络服务器配置。将您的 Web 服务器指向 public 目录并重新启动它。
对于 Apache,您可以使用以下指令:
DocumentRoot "/path_to_laravel_project/public"
<Directory "/path_to_laravel_project/public">
对于nginx,你应该改变这一行:
root /path_to_laravel_project/public;
这样做之后,所有的 Laravel 文件将无法再从浏览器访问。
【讨论】:
DocumentRoot "/path_to_laravel_project/public" 放入.htaccess 中?
这取决于您运行的网络服务器。对于 Apache,它将是 .htaccess 文件,而对于 Nginx,它将在服务器配置文件中处理。
【讨论】:
这是不正确的。 composer.json 位于 public 目录之外,因此不应访问。这意味着您的 VirtualHost 配置不正确。
请确保您的目录路径以/public 结尾。
【讨论】:
index.php 和 .htaccess 应仅位于 public 目录中,不应修改。
将您的文档根目录设置为public 目录,这样其他文件将无法直接访问。在你的 apache/nginx/ 中寻找它?配置文件。
【讨论】:
/public/ 吗?如果您将文档根目录设置为公共目录,那么您不会。为什么要在所有 URL 的开头添加 /public/?
public 路径时,它将是您的Web 服务器的根目录,因此URL 中不再有/public/。