我们已经安装了大约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重写规则从公共web中隐藏此供应商文件夹和所有子文件夹?的想法是,它将拒绝用户键入http://my-site1/vendor/somevendor/somefile.php,但仍然允许我的脚本在需要时要求或包括和使用该目录中的文件。
或者,我可以将供应商放在此处:
C:\wamp64\www\vendor
然后以某种方式只包含我想要的供应商项目?并不是所有的供应商包都到每个项目中,而是以某种方式指定我想要在每个站点上使用的类或包。
发布于 2018-06-09 02:11:19
您只需使用以下命令将.htaccess文件放在供应商文件夹中:
Order allow,deny
Deny from all
在浏览器中输入url将无法访问供应商文件夹中的文件,但可用于您的脚本。
发布于 2018-06-09 03:43:32
您可以考虑将供应商保留在具有以下文件结构的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重写来禁止访问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的许多问题可以通过“删除vendor
目录并再次运行composer install
”来解决(这也会删除您的.htaccess
并使vendor
目录可从web访问)。
https://stackoverflow.com/questions/50766175
复制相似问题