【问题标题】:How can the document root be changed in web server behavior?如何在 Web 服务器行为中更改文档根目录?
【发布时间】:2016-05-13 22:36:11
【问题描述】:

我想知道是否有一种方法可以更改相对文档根目录以提高安全性。我将尝试通过以下示例来解释自己:

/root
    /app
    /public

假设对 Web 服务器的 www.example.com 请求将指向 root 文件夹。
我想知道是否有配置,例如通过位于所述root 文件夹中的.htaccess 文件,这将使服务器指向public 文件夹,因此任何远程路径总是相对于所述@ 987654328@文件夹。
在这种情况下,www.example.com/app 将请求 public 内的 app 文件夹,而不是 root 内的 app 文件夹,从而使后者无法从远程 url 请求中访问。
以同样的方式,www.example.com/public 将在我们的根 public 文件夹中请求一个 public 文件夹,依此类推。

我已经阅读了各种主题,例如 this one,其中提到使用自定义 .htaccess 配置来实现类似的功能,但它需要在所述文件中手动配置请求 url,而我的意图是让它在没有的情况下工作无论您在何处托管应用程序,都需要进一步配置。 我见过的另一个可能的解决方案是通过.htaccess 文件进行硬重定向,这实际上并不能解决任何问题。

请随意编辑这篇文章,因为我可能很难理解我的观点。

【问题讨论】:

  • 您可以访问整个服务器吗?或者你只有一个 cPanel 或类似的?
  • Cpanel,这就是它的想法,准备在大多数类型的主机上安装它。因此,我为什么要求动态解决方案(如果有的话)。
  • 通常,在共享主机中(如果是专用主机,您也可以这样做),您的网站进入/public_html 文件夹。您可以将任何其他文件放在它之外,并且不需要修改任何内容。这不适合你吗?如果不是,为什么?抱歉,如果我还没有收到您的问题。
  • 问题是,例如,有人可能想在子域上使用它,或者在远程服务器上组织他们的文件,而不是默认情况下。这就是我要求在应用程序文件中进行配置的原因。

标签: php apache .htaccess


【解决方案1】:

您还可以在一个网络服务器上托管多个站点。您可以使用前面提到的 mod_alias 结合制作 VirtualHosts 和 Alias

在此示例中,您应该拥有自己的服务器(专用或 VPS)

通过使用 Virtualhosts,您可以在收到对 www.example.com 的请求以提供特定文件夹中的内容时告知网络服务器。

它的一个示例虚拟主机是:

<Virtualhost *:80>
ServerName ^domain_or_ip^

DocumentRoot  ^path of the public folder^

DirectoryIndex index.php home.php index.html index.htm

ErrorLog ^path for a file containing php errors^
CustomLog ^path for logging whitch browser and ip visited your site^ combined
</Virtualhost>

【讨论】:

    【解决方案2】:

    我建议您无论如何将您的服务器指向公用文件夹,因为它更安全,您可以看到所有框架的行为方式都相同,它们都有一个服务器指向的“公用”文件夹。

    在公共文件夹中,您有一个脚本入口点,例如

    index.php
    

    您将通过此条目与您的应用程序进行通信。

    当然,您仍然可以按照您要求的方式工作,而且效果会很好,但谁知道您可能会错过某些东西,并且有人可以访问和查看您的“内部”文件。

    【讨论】:

    • 根据我从阅读的内容和得到的所有答案中收集到的信息,不可能按照我的要求做,因为在 apache 查找 htaccess 文件之前文档根目录显然已解决,并且无法通过所述 htaccess 修改该本地请求。将服务器设置为查找公用文件夹或仅手动设置似乎是唯一安全的选项。感谢您的回答。
    【解决方案3】:

    您使用的是 Apache 网络服务器?如果我理解正确,您正在寻找虚拟目录。通常,我们必须将 Web 应用程序放在 Apache 的文档根目录中,以使应用程序可以从网络访问。然而,有一个技巧可以让 Web 应用程序仍然可以访问,即使我们将它放在 Apache 的文档根目录之外。请在此处阅读:http://w3shaman.com/article/creating-virtual-directory-apache 显然归功于 W3Shaman.com。

    【讨论】:

      【解决方案4】:

      您可以使用这个简单的.htaccess 文件:

      <IfModule mod_rewrite.c>
          RewriteEngine on
          RewriteBase /
          RewriteCond %{REQUEST_URI} !^/public/
          RewriteRule ^(.*)$ /public/$1 [L]
      </IfModule>
      

      您服务器上的任何请求都将指向公用文件夹。

      在公用文件夹中,您可以添加一个额外的.htaccess 文件来处理您的站点规则。

      【讨论】:

      • 它没有改变相对路径,只是试图将任何请求重定向到公用文件夹。
      • 有什么区别?如果有人打电话给http://www.example.com/css/style.css,他会从公用文件夹中获取文件,而不会看到实际的重写。
      • 它实际上显示了 url 中的重写,就像一个硬重定向。而且它只是一个补丁,因为它实际上并没有改变远程请求的根,只是重定向它们,所以不是我要问的。
      • “更改根目录”和“内部重定向它们”之间确实没有区别。有 1 个文档根目录,您不想更改它(因为它需要访问 httpd.conf)。 mod_rewrite 是将 URL 映射到新文件系统路径的最简单方法。
      • 向弗洛里安的回答添加了基本的反循环检查
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      相关资源
      最近更新 更多