Multiple applications with Subfolder::class middleware

If you want to use subfolder middleware for URL routing, you need to adjust config/params.php file.

For our example let’s assume that web server root is pointing to the all projects root. There is yii3 project with its yii3/public directory that should be accessed as http://localhost/yii3/public.

Note: While being a common practice for local development, it is recommended to prefer separate hosts for separate projects pointint directly to public directory.

Here’s how config/params.php should be adjusted, add prefix to app config:

'app' => [
    'prefix' => '/yii3/public',

Now defined config/common/subfolder.php will be used for URL routing.



use Yiisoft\Aliases\Aliases;
use Yiisoft\Router\UrlGeneratorInterface;
use Yiisoft\Yii\Middleware\SubFolder;

return [
    SubFolder::class => static function (
        Aliases $aliases,
        UrlGeneratorInterface $urlGenerator
    ) use ($params) {
        $aliases->set('@baseUrl', $params['app']['prefix']);

        return new SubFolder(
            $params['app']['prefix'] === '/' ? null : $params['app']['prefix'],

To test it in action run the following command:

composer run serve

Now you can use http://localhost:8080/yii3/public to access the application.

1 Like