Shared hosting environments are often quite limited about configuration and directory structure. Still in most cases you can run Yii 2.0 on these.
Since there's typically only one webroot it is recommended to use basic application template. Refer to Installing Yii chapter and install application template locally.
If webserver used is Apache you'll need to add .htaccess
file with the following content to web
(where index.php
is):
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
In case of nginx you should not need any extra config files.
If after connecting to your shared hosting via FTP or by other means you're seeing something like the following, you're most probably lucky.
config
logs
www
In the above www
is webserver directory root (i.e. webroot). It could be named differently. Common names are: www
,
htdocs
, public_html
. Since we have webroot in our basic application template named web
we need to rename it to
whatever hosting webroot is before uploading.
If you can write to the root level directory i.e. where config
, logs
and www
are, just upload assets
, commands
etc. as is.
In order to run Yii hosting should meet its requirements. The very minimum requirement is PHP 5.4. In order to check
the rest copy requirements.php
from root directory into webroot directory and run it via browser using
http://example.com/requirements.php
URL. Don't forget to delete the file afterwards.
Deploying advanced application to shared hosting is a bit trickier than doing it with basic application because it has two webroots which shared hosting typically donesn't have. Because of that structure could be adjusted a bit.
First of all we need a webroot directory. Name it the way it matches your hosting webroot as described in Renaming webroot above. Then create the following structure:
www
admin
backend
common
console
environments
frontend
...
www
will be our frontend directory so move contents of frontend/web
into it. Do the same with backend/web
moving
its contents into www/admin
. In each case you need to adjust paths in index.php
and index-test.php
.
Originally backend and frontend are intended to run at different domains. When we're moving it all to the same domain it
is starting to share the same cookies creating a clash. It order to fix it adjust backend application config
backend/config/main.php
like the following:
'components' => [
'request' => [
'csrfParam' => '_backendCSRF',
'csrfCookie' => [
'httpOnly' => true,
'path' => '/admin',
],
],
'user' => [
'identityCookie' => [
'name' => '_backendIdentity',
'path' => '/admin',
'httpOnly' => true,
],
],
'session' => [
'name' => 'BACKENDSESSID',
'cookieParams' => [
'path' => '/admin',
],
],
],