Всем привет. На реальном сервере (это не Патруль и не Радон) структура папок:
~/domains/sitename.com/public_html
Т.к. сайт будет собран Композером, как задать рабочую папку сайта web?
Т.е. или
~/domains/sitename.com/public_html/web
или
~/domains/sitename.com/web
Сейчас можно в sitename.com положить composer.json и поменять в нем "web" на "public_html". Может оно и будет работать, но хотелось бы работать "стандартно".
Комментарии
Если хочется работать стандартно, можно не менять ничего, просто положить сайт в ~/domains/sitename.com/ а public_html превратить в ссылку на директорию web:
rmdir public_html
ln -s ./web ./public_html
Самый простой и рабочий способ 👍
Как план Б принимается. Да, но физически оно все равно будет в public_html. Где это изменить?
Нет, физически оно будет в web
Физически оно будет в директории web, а public_html будет просто ссылаться на web, если сделать симлинк, как я предложил выше.
Если же ты хочешь совсем отказаться от public_html, то это надо смотреть в настройках хостера, позволяют они поменять веб директорию через свою панель настроек или нет.
Можно и шаблон проекта поменять, чтоб избавиться от папки web, но нужно ли тебе это- решай сам, ведь хостеры могут меняться, а создание симлинка гораздо проще решает проблему.
Коллеги спасибо! Это решение дает небольшой прорыв моего научного труда.
В директории /public_html еще лежат
/vendor
composer.json
composer.lock
что будет при обращении к ним, если из /public_html дорога ведет в /web ?
Если вы пользуетесь рекомендованным шаблоном композер проекта (а это лучший выбор), то ни вендор директории ни композер файлов в веб руте не будет.
Если вместо "директория-проекта" ставим точку,
composer create-project drupal/recommended-project .
то все загружается в текущую директорию, например /public_html
и там оказываются и файлы композера и папка вендор
зачем много вложений?
Разумеется, так как точка обозначает текущую директорию. Вот вам композер и скачал все в текущую директорию. В этой ситуации нужно все то, что скачал композер вынести на уровень выше.
Т.е. вот это вот все должно лежать в директории "мой-сайт":
composer.json
omposer.lock
.editorconfig
.gitattributes
vendor/
web/
а мой-сайт/public_html делается симлинком на web/ и структура вашего проекта в "мой-сайт"выглядит так:
composer.json
omposer.lock
.editorconfig
.gitattributes
vendor/
public_html -> web/ -- симлинк на web/
web/
Нужно это все для того, что веб серверу не нужно давать доступ к вендор директории, так как внешним посетителям не стоит давать туда доступ, как и к файлам композера, вашим гит директориям, настройкам и, возможно, директории с конфигами вашего редактора .idea/code и т.п.
В общем единственное, что должно быть доступно веб серверу- содержимое директории web.
Собственно, специально для вас, так как вы в соседней теме на такие же грабли натолкнулись:
Вот официальная рекомендация по установке друпала: https://www.drupal.org/docs/develop/using-composer/using-composer-to-ins...
Конкретно 9-ку устанавливать лучше так: composer create-project drupal/recommended-project директория-проекта.
Таким образом в вашей "директории-проекта" вендор и композер будут лежать в корне проекта, а то, к чему должен иметь доступ веб сервер будет в директории web. Соответственно вы сможете спокойно сделать симлинк public_html ссылающийся на web.
Верно ли я понял, что если на моём хостинге в корне проекта есть три папки:
- cgi-bin
- tmp
- www
То мне нужно пробовать ставить проект в корень командой вида:
и далее делать симлинк с www на web?
Если я поставлю все в www командой вида:
и потом добавлю в www/ файл .htaccess, который будет перенаправлять на директорию www/web - в этом не будет никакого смысла, т.к. папка vendor не вынесена за пределы рута, в моём случае www? Или как?)
Делай первый вариант.
Твоя задача простая: директория vendor, возможно private должны быть вне доступа веб сервера.
Веб сервер должен ходить только в web. Раз у хостера эта директория называется www- делай с нее симлинк на web.
Спасибо, попробую