В большинстве случаев приложение доступно через корневую директорию домена, например https://example.com/
. Но иногда требуется разместить приложение в подпапке, например https://example.com/application/
. Для этого нужно выполнить несколько манипуляций:
index.php
, из корня в подпапку;Разберём подробнее на примере шаблона веб-приложения Yii3.
Шаблон приложения без изменений и домен yii3app.test
, указывающий на папку /public
.
Требуется сделать доступным приложение по адресу yii3app.test/application
.
В папке /public
создаём папку application
.
Из папки /public
переносим файлы и папки в подпапку /public/application
:
index.php
,assets
,images
,.htaccess
(если используется Apache).В нашем случае нужно изменить только пути к корневой папке в точке входа index.php
с dirname(__DIR__)
на dirname(__DIR__, 2)
:
<?php
...
// Раз
require_once dirname(__DIR__, 2) . '/autoload.php';
if (getenv('YII_ENV') === 'test') {
// Два
$c3 = dirname(__DIR__, 2) . '/c3.php';
if (file_exists($c3)) {
require_once $c3;
}
}
// Run HTTP application runner
$runner = new HttpApplicationRunner(
// Три
dirname(__DIR__, 2),
$_ENV['YII_DEBUG'],
$_ENV['YII_ENV']
);
$runner->run();
В шаблоне приложения нужно исправить только псевдоним пути к папке с ресурсами. Открываем параметры /config/params.php
и вносим изменение:
'yiisoft/aliases' => [
'aliases' => [
...
'@assets' => '@root/public/application/assets',
...
],
],
Здесь есть несколько путей: настроить маршрутизацию вручную или использовать мидлварь SubFolder
из пакета Yii Middleware. Рассмотрим оба варианта.
Изменяем псевдоним базового URL в параметрах приложениях /config/params.php
:
'yiisoft/aliases' => [
'aliases' => [
...
'@baseUrl' => '/application/',
...
],
],
... и в конфигурации маршрутов /config/routes.php
оборачиваем все маршруты в группу с префиксом:
return [
Group::create('/application')
->routes(
Route::get('/')->action([SiteController::class, 'index'])->name('home'),
),
];
Мидлварь SubFolder
из пакета Yii Middleware позволяет автоматически убрать префикс из запроса, настроить генерацию URL и псевдоним пути.
Для использования мидлвари достаточно добавить её в список мидлварей в параметрах приложения в файле /config/params.php
. Но лучше её дополнительно сконфигурировать, указав префикс (тем самым мы улучшаем производительность, так как мидлваре не придётся самой определять префикс) и псевдоним базового URL, в который нужно записать префикс (это позволит не делать этого вручную, как в предыдущем варианте):
'middlewares' => [
ErrorCatcher::class,
SessionMiddleware::class,
static function (UrlGeneratorInterface $urlGenerator, Aliases $aliases) {
return new SubFolder(
$urlGenerator,
$aliases,
'/application',
'@baseUrl',
);
},
Router::class,
],
При написании статьи использовались следующие пакеты: