隐藏 Docroot 中的作曲家供应商文件夹



我们已经设置了大约二十几个内部Web应用程序。几年后的今天,我想开始使用来自外部源的包,并使用管理包的 Composer 安装项目。我以前从未需要过它,但想尝试为这些网站添加一些额外的功能。

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

因此,DOCUMENT_ROOT目录如下所示:

c:wamp64wwwmy-site1
c:wamp64wwwmy-site2
c:wamp64wwwmy-site3

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

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

C:wamp64wwwmy-project1vendor  //for vendor code
C:wamp64wwwmy-project1public_html //for DOCUMENT_ROOT

但我最终得到的是:

C:wamp64wwwmy-site1vendor  //for vendor code specific to site1
C:wamp64wwwmy-site2vendor  //for vendor code specific to site2

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

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

C:wamp64wwwvendor 

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

您只需将.htaccess 文件放在供应商文件夹中,其中包含:

Order allow,deny
Deny from all

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

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

c:wamp64wwwmy-site1
c:wamp64wwwmy-site2
c:wamp64wwwmy-site3
c:wamp64wwwvendorsmy-site1
c:wamp64wwwvendorsmy-site2
c:wamp64wwwvendorsmy-site3

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

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

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

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

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

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

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

利用@wizardnx答案,您可以在运行命令后更新composer.json以将.htaccess文件添加到vendorcomposer install目录中,如下所示:

{
"require": {
"robmorgan/phinx": "^0.13.4"
},
"scripts": {
"post-update-cmd": [
"php -r "file_put_contents('vendor/.htaccess', 'Order allow,deny' . PHP_EOL . 'Deny from all');""
]
}
}

相关内容

  • 没有找到相关文章

最新更新