У меня есть готовый сайт на YII2 со следующей структурой
то есть папка web находится глубоко, а в hostland нужно чтоб обязательно хранилось в root /site.ru/htdocs /www ?? Возможно ли там настроить где находится index.php, как например, мы делаем это в апаче?
DocumentRoot /var/www/site.ru/web/ ServerName site.ru
На shared-хостинге нельзя менять настройки сервера, поэтому такие вопросы нужно решать с помощью распределения файловой системы и настроек фреймворка.
Сделайте структуру проекта такого вида:
Структура фронтенда должна быть выше папки 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 как я описал выше.
Если есть возможность прописать директиву 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/
Виртуальный выделенный сервер (VDS) становится отличным выбором
Какой веб-сервер наиболее производительный на Windows Server — штатный IIS или nginx (или вообще апач)? Считается, что nginx самый быстрый, но на офф сайте...
Здравствуйте! У меня есть php файл по адресу сайт/scripts/aboutphp
Помогите! Пытаюсь зайти в PhpMyAdmin, но вместо красивой отрисованой страницы выдает это
Есть диапазоны чисел, например от 84131840 до 84140031 и таких диапазонов довольно много (около 100) нужно проверить есть ли это число в каком-то из всех...