Можно ли установить сайт на YII2 на hostland.ru [требует правки]

611
30 декабря 2016, 13:36

У меня есть готовый сайт на YII2 со следующей структурой

  • site
    • backend
      • controllers
      • models
      • view
      • web
        • index.php
    • common
      • controllers
      • models
      • view
    • site
      • controllers
      • models
      • view
      • web
        • index.php

то есть папка web находится глубоко, а в hostland нужно чтоб обязательно хранилось в root /site.ru/htdocs /www ?? Возможно ли там настроить где находится index.php, как например, мы делаем это в апаче?

DocumentRoot /var/www/site.ru/web/ ServerName site.ru

Answer 1

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

Сделайте структуру проекта такого вида:

  • common
    • config
    • models
  • controllers
  • models
  • view
  • www
    • index.php
    • backend
      • controllers
      • models
      • view
      • web
        • index.php

Структура фронтенда должна быть выше папки www на хостинге и в ней должна лежать папка common с общими настройками.

Переименуйте папку web на фронте в папку www, которая и будет той папкой, через которую настроен показ сайта на хостинге.

Поменяйте в composer.json фронтенда путь к папке assets:

        "setPermission": [
            {
                "runtime": "0777",
                "www/assets": "0777",
                "yii": "0755"
            }
        ],

Дальше настраиваете нужные пути в папке common и пути к вендорам и конфигам в www/backend/yii.php.

Но лучше, конечно, иметь свой сервер для таких целей, пусть даже вирутуальный, vds сейчас стоят недорого, за 300-500 рублей в месяц можно найти, на том же Хостлэнде есть таки недорогие VDS: http://www.hostland.ru/vds, а на shared-хостинге проще сделать сайт с админкой с помощью 2 basic-проектов, фронтенд загрузить на site.ru, а админку на admin.site.ru и поменять в них настройки папки отображения, с web на www как я описал выше.

Answer 2

Если есть возможность прописать директиву document root, то приписываем её эту в папку DocumentRoot /var/www/site.ru/web/ ServerName site.ru.

Если такой возможности нет, то разруливаем эту ситуацию через htaccess, пример конфига

# Mod_Autoindex
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
# Mod_Rewrite
<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On
  IndexIgnore */*
  RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
  RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
  # Если запрос начинается с /admin, то заменяем на /backend/web/
  RewriteCond %{REQUEST_URI} ^/admin
  RewriteRule ^admin\/?(.*) /backend/web/$1
  # Добавляем другой запрос /frontend/web/$1
  RewriteCond %{REQUEST_URI} !^/(frontend/web|backend/web|admin)
  RewriteRule (.*) /frontend/web/$1
  # Если frontend запрос
  RewriteCond %{REQUEST_URI} ^/frontend/web
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /frontend/web/index.php
  # Если backend запрос
  RewriteCond %{REQUEST_URI} ^/backend/web
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /backend/web/index.php
</IfModule>

До конца не понимаю почему, но у меня вроде как не всегда работало(локально не работало), если не положить в папку frontend/web/ и backend/web/ еще и свои htaccess , по всей видимости дело тут в настройках.

 # Mod_Autoindex
 RewriteEngine On
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)?$ index.php

Ну и естественно у вас будут немного другие пути, например вместо frontend/web/ - site/web/

READ ALSO
IIS или nginx на Windows?

IIS или nginx на Windows?

Какой веб-сервер наиболее производительный на Windows Server — штатный IIS или nginx (или вообще апач)? Считается, что nginx самый быстрый, но на офф сайте...

588
Открытие файла по другому адресу

Открытие файла по другому адресу

Здравствуйте! У меня есть php файл по адресу сайт/scripts/aboutphp

403
Не могу зайти в PhpMyAdmin

Не могу зайти в PhpMyAdmin

Помогите! Пытаюсь зайти в PhpMyAdmin, но вместо красивой отрисованой страницы выдает это

637
Как проверить число на вхождение в диапазон включительно?

Как проверить число на вхождение в диапазон включительно?

Есть диапазоны чисел, например от 84131840 до 84140031 и таких диапазонов довольно много (около 100) нужно проверить есть ли это число в каком-то из всех...

478