4

When I do composer create-project craftcms/craft, it will create a web folder. My webroot is called public_html though. Can I change this somehow, or should I make a symlink?

Or simply don't use composer to install in that case?

Urs
  • 639
  • 4
  • 13

1 Answers1

8

You can just rename web/ to public_html/, or move all the files inside web/ into public_html/. (Don’t forget to move the .htaccess and .env files, if the latter.)

As long as the location of the public_html/ folder is in the same place as the web/ folder was, you don’t need to change anything else.

my-project.test/
├── config/
├── ...
└── public_html/
    ├── index.php
    └── ...

If you need to change the location to something like this:

my-project.test/
├── craft/
│   ├── config/
│   └── ...
└── public_html/
    ├── index.php
    └── ...

Then just make sure that your CRAFT_BASE_PATH constant points to the right base path (craft/).

// old:
define('CRAFT_BASE_PATH', dirname(__DIR__));

// new:
define('CRAFT_BASE_PATH', dirname(__DIR__) . '/craft');
Brandon Kelly
  • 34,307
  • 2
  • 71
  • 137
  • But won't that break composer update for later maintenance? – Urs Aug 23 '18 at 13:48
  • 1
    No it won't. Composer update installs everything into /vendor. All my projects use /public instead of /web. – Jay Aug 23 '18 at 13:50
  • Ok! So that would also be a valid setup: home/craft (with config, modules, storage, template and vendor, not accessible via web), home/public_html (with the content of web and a modified CRAFT_BASE_PATH)? – Urs Aug 23 '18 at 13:59
  • In that case just make sure that the CRAFT_BASE_PATH constant in public_html/index.php is pointed at the craft/ folder. – Brandon Kelly Aug 23 '18 at 16:08
  • 2
    Just updated my answer to show what that would look like. – Brandon Kelly Aug 23 '18 at 16:12