Ceci est une ancienne révision du document !


Déployer l'application dans un sous répértoire

Le but ici est d’héberger une appli Synfony dans un sous répertoire et non pas a la racine du site web.

Imaginons que l'on veuille acceder a notre appli via le répértoire 'sous_repertoire' comme ceci :
http://mon_site.com/sous_repertoire/xxxx/xxxx/
La partie /xxxx/xxxx devenant la route a retourner au routeur Symfony

Ressources:

Nouveau HTACCESS

a placer dans le répertoire de l'application.

Ce .htaccess renvois tout ce qui est demandé au niveau de ce répértoire vers le répértoire public

.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*) public/index.php/$1 [L]
</IfModule>

Modification du routage

Configuration dans le fichier .env

Dans notre exemple l'adresse de notre app est http://mon_site.com/sous_repertoire/xxxx/xxxx/

Dans le fichier .env ou .env.local ajouter la variable globale

.env.local
BASE_HOST="/sous_repertoire"
BASE_URL="http://mon_site.com/sous_repertoire/public" #pour les Assets
Si BASE_URL est vide ou est une adresse mal formée, alors on obtient une erreur

Dans le fichier services.yaml

Pour transformer la variable globale en variable interpretable par le routeur dans le fichier annotations.yaml

config/services.yaml
parameters:
    app.base_host: '%env(BASE_HOST)%'

Ajouter un prefix aux urls

config/routes/annotations.yaml
controllers:
    resource: ../../src/Controller/
    type: annotation
    prefix: '%app.base_host%'
 
kernel:
    resource: ../../src/Kernel.php
    type: annotation
    prefix:  '%app.base_host%'

Modifier l'url de base pour les Assets

config\packages\framework.yaml
    assets:
        base_urls: ['%env(BASE_URL)%']
J'ai essayé avec le paramètre base_path qui me paraissait plus approprié, mais cela n'a pas fonctionné…

Sources & Ressources

Vous pourriez laisser un commentaire si vous étiez connecté.