【问题标题】:hide composer vendor folder that's inside docroot隐藏 docroot 中的 composer vendor 文件夹
【发布时间】:2018-06-08 18:02:08
【问题描述】:

我们已经设置了大约两打内部网络应用程序。多年后的现在,我想开始使用来自外部资源的包,并通过使用管理包的 Composer 来安装项目。我以前从未需要它,但想尝试为这些站点添加一些额外的功能。

问题是这些内部网站都没有使用 /project/public_html/ 结构设置。文档根目录是 WAMP 中的主目录。

所以 DOCUMENT_ROOT 目录看起来像这样:

c:\wamp64\www\my-site1\
c:\wamp64\www\my-site2\
c:\wamp64\www\my-site3\

每个项目都不同,可能需要不同的 php 包。我希望能够使用 Composer 来管理包。

当您运行 Composer 时,会创建一个 vendor 文件夹。我知道良好的实践要求我们应该把它放在这样的结构中:

C:\wamp64\www\my-project1\vendor  //for vendor code
C:\wamp64\www\my-project1\public_html //for DOCUMENT_ROOT

但我的结果是这样的:

C:\wamp64\www\my-site1\vendor  //for vendor code specific to site1
C:\wamp64\www\my-site2\vendor  //for vendor code specific to site2

我可以使用 apache 重写规则从公共网络隐藏这个供应商文件夹和所有子文件夹吗? 想法是它会拒绝输入 http://my-site1/vendor/somevendor/somefile.php 的用户,但仍允许我的脚本需要或包含并在需要时使用该目录中的文件。

或者我可以把供应商放在这里:

 C:\wamp64\www\vendor 

然后以某种方式只包含我想要的供应商项目?不是每个项目的所有供应商包,以某种方式指定我想在每个站点上使用哪些类或包。

【问题讨论】:

  • 简单答案:将其放在 docroot 之外。

标签: php apache composer-php


【解决方案1】:

您可以简单地在您的供应商文件夹中放置一个 .htaccess 文件:

Order allow,deny
Deny from all

供应商文件夹中的文件无法通过在浏览器中键入 url 来访问,但可用于您的脚本。

【讨论】:

  • 供应商中的子文件夹呢?比如vendor/library1vendor/library2等等。我不想在每个子文件夹中都放一个.htaccess。
  • @S.Mason 是的,子目录也受 .htacces 保护。试一试:)
  • 好的很好,一件事是在命令命令中,逗号后面不能有空格,或者我发现有Apache错误。应该是Order allow,deny
【解决方案2】:

您可以考虑使用以下文件结构将供应商保留在 docroot 之外:

c:\wamp64\www\my-site1\
c:\wamp64\www\my-site2\
c:\wamp64\www\my-site3\
c:\wamp64\www\vendors\my-site1\
c:\wamp64\www\vendors\my-site2\
c:\wamp64\www\vendors\my-site3\

composer.json中配置供应商目录:

"config": {
    "vendor-dir": "../vendors/my-site1"
},

并在您的index.php 中包含自动加载器:

require __DIR__ . '/../vendors/my-site1/autoload.php';

如果您无法更改供应商的目录,您可以使用 mod rewrite 来禁止访问vendor 目录。将其放入您的主 .htaccess 文件中(例如 c:\wamp64\www\my-site1\.htaccess:

RewriteEngine on

RewriteRule ^vendor/(.*)?$ / [F,L]
RewriteRule ^composer\.(lock|json)$ / [F,L]

vendor 目录中使用.htaccess 也可以,但是很容易意外删除此文件 - 通常vendor 目录在 VCS 中没有版本控制,并且 composer 的许多问题都可以通过 "delete vendor目录并再次运行composer install”(这也将删除您的.htaccess 并使vendor 目录可从网络访问)。

【讨论】:

  • 我将按照您的第一个想法进行操作:c:\wamp64\www\composer-packages\my-site1\vendors\ 每个站点都会在 \composer-packages\ 目录中获得自己的子文件夹。这样它就在文档根目录之外,但仍然可以被它所属的站点识别。
猜你喜欢
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
相关资源
最近更新 更多