【问题标题】:Laravel out of servers root directoryLaravel 脱离服务器根目录
【发布时间】:2020-08-21 10:43:10
【问题描述】:

我在 Laravel 的文档中找到了以下部分。

“Laravel 应始终从为您的 Web 服务器配置的“Web 目录”的根目录中提供服务。您不应尝试从“Web 目录”的子目录中提供 Laravel 应用程序。尝试这样做可能会暴露您的应用程序中存在的敏感文件。”

这是否意味着它应该始终直接在根目录中,而不是在子目录中或其他方式?

如果我的服务器提供商给我根目录/ 并告诉我将文件放入/www 怎么办?

这会使其变得脆弱吗?

【问题讨论】:

  • 这意味着您的托管服务提供商(即 VPS 服务器)应该将虚拟主机指向/path/to/example.tld/public,而不是指向/path/to/example.tldpublic 目录之外的任何内容都不应该可供外部访问。只有public 目录应该可以被外部访问。其他一切都是保护应用程序的大量工作。您的具体问题主要是您的提供者可以帮助您解决的问题。

标签: laravel


【解决方案1】:

所以我假设您使用的是共享托管服务器:

网站的托管方式是使用网络服务器(apache、nginx、...等)(如果您使用的是 godaddy 或 namecheap 托管,他们将在内部安装一个网络服务器 ) 在这些 Web 服务器中,您可以设置文档根目录,就像服务器将请求定向到的位置一样。

如果你的服务器说把文件放在/www 中,那么/www 很可能是文档根目录,你应该把文件放在哪里

注意:无论您使用什么服务器,我都会 99.9% 确定您不应该放置网站文件或服务器的实际根目录,也就是 /

【讨论】:

  • “知道这一点,如果您的服务器说将文件放在 /www 中,那么 /www 很可能是文档根目录,您应该将文件放在它的位置”:不。如果 www 是 Apache 的 DocumentRoot,则只有 Laravel 目录的 app/public 应该递归放到下面。此外,在www 配置为DocumentRoot 的情况下,Laravel 目录本身必须递归地放在www 之上。看我的回答。
【解决方案2】:

Laravel 对此不是很清楚。

但我的理解是:

如果你服务器上“web 目录”的根目录是 /var/www,你应该将 Laravel 放在那个文件夹中,而不是放在 /var/www/otherdirectory/var/otherdirectory/otherdirectory

显然将 Laravel 放在 /var/otherdirectory/otherdirectory 不是一个好主意,但为什么他们只说在“网络目录”的根目录而不是 /var/www/otherdirectory ?我认为没有人知道,Laravel 也无法真正解释。

  • root directory on a linux server/
  • Linux 服务器上的“web 目录”目录的根目录可以是您的 web 服务器配置中的任何内容,也可以是您的供应商给您的任何内容(如果您无法管理 web 服务器配置),但大多数时候它是在/var/www/var/www/html/var/www/domain.com

另外 Laravel 成员似乎在说你不能在像 https://example.com/website 这样的子目录网站中使用 Laravel,因为(Laravel 说)他们不支持它并且(Laravel 说)不推荐它,即使这个网站是在大多数情况下,从“web 目录”的根目录中提供服务,即/var/www。 (但为什么???)

在此处查看讨论:Discussion 34388

【讨论】:

    【解决方案3】:

    我不同意@Jean-Roch B. 的上述回答,同意@Tpojka 的评论。

    如果你服务器上“web 目录”的根目录是 /var/www 你应该把 Laravel 放在那个文件夹中

    没有。根目录(DocumentRoot 定义为https://httpd.apache.org/docs/2.4/mod/core.html#documentroot)旨在允许 HTTP 服务器以递归方式向客户端提供文件。这意味着不能将兄弟和递归父目录提供给客户端。

    这是什么意思?如果你将 Laravel 递归地放在根目录下,你就会遇到安全问题。例如,配置和环境文件、您的控制器、您的迁移文件等,如果后者要求,将提供给客户端。

    通过说以下内容:

    Laravel 应该始终在为您的网络服务器配置的“网络目录”的根目录之外提供服务。你不应该尝试从“web 目录”的子目录中提供 Laravel 应用程序。尝试这样做可能会暴露您的应用程序中存在的敏感文件。

    ,Laravel 文档说不要将 Laravel 目录递归地放在文档根目录下。 您绝对必须将 LARAVEL 目录递归地放在文档根目录之上。

    带有 Laravel 站点的文档根目录必须只指向 Laravel 目录的 app/public 目录。

    我将引用@Tpojka(请参阅他对 OP 问题的评论),他是绝对正确的:

    公共目录之外的任何内容都不应可供外部访问。只有公共目录应该可以被外部访问。其他一切都是在保护应用程序方面的大量工作。

    另外,再次引用@Jean-Roche B.:

    显然将 Laravel 放在 /var/otherdirectory 或 /otherdirectory 不是一个好主意

    ,如果像他说的/var包含/var/www,我认为Laravel实际上可以放入/var,删除www,并将根目录设为app/public目录(这是一个例子)。

    结束:DocumentRoot 通常可以在您的 Web 主机配置管理面板中进行配置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      相关资源
      最近更新 更多