隐藏docroot内部的composer vendor文件夹

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (82)

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

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

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

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

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

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

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之外:

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]

使用目录.htaccess内部vendor也可以工作,很容易意外删除这个文件 - 通常vendor目录没有在VCS中版本化,并且编写器的许多问题都可以通过“删除vendor目录与composer install再次运行”来解决(这也将删除你的.htaccess和make vendor目录可访问来自网络)。

用户回答回答于

您只需将.htaccess文件放在供应商文件夹中即可:

Order allow, deny
Deny from all

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

扫码关注云+社区

领取腾讯云代金券