скрыть папку поставщика композитора, которая находится внутри docroot - PullRequest
0 голосов
/ 08 июня 2018

Мы настроили около двух десятков внутренних веб-приложений.Спустя годы я бы хотел начать использовать пакеты из внешних источников и устанавливать элементы с помощью 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 

, а затем каким-то образом включить только те проекты поставщиков, которые мне нужны?Не все пакеты поставщиков для каждого проекта, какой-то способ указать, какие классы или пакеты я хочу использовать для каждого сайта.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вы можете оставить поставщиков вне 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, и многие проблемы с composer решаются с помощью «удаления каталога vendor и повторного запуска composer install» (который также удалит ваш каталог .htaccess и сделает каталог vendor доступным из Интернета).

0 голосов
/ 08 июня 2018

Вы можете просто поместить файл .htaccess в папку вашего поставщика с помощью:

Order allow,deny
Deny from all

Файлы в папке поставщика не будут доступны при вводе URL-адреса в браузере, но будут доступны для ваших сценариев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...