Article

logo apache .htaccess

Fichier .Htaccess Symfony

deveops
2.16min to read
15-01-2024

Fichier .htaccess de base pour une application Symfony 6.4.*

Fichier .htaccess de base pour une application Symfony 6.4.*

Pour qu'une application Symfony fonctionne correctement, vous DEVEZ stocker ce fichier ".htaccess" dans le même répertoire que votre contrôleur frontal,"index.php" soit  dans le dossier public de votre application.

# Symfony 6.4. fichier de base pour une redirection correcte
# à placer dans le dossier public avec le front contrôleur index.php
# Utilisez le contrôleur frontal comme fichier d'index.
DirectoryIndex index.php

# Dé-commentez la ligne suivante si vous installez des ressources sous forme de liens symboliques ou si vous
# rencontrez des problèmes liés aux liens symboliques lors de la compilation de LESS/Sass/CoffeScript.

Options +FollowSymLinks

# La désactivation de MultiViews empêche les négociations indésirables, par ex. "/index" ne devrait pas être résolu
# par le  contrôleur frontal "/index.php" mais réécrit en "/index.php/index".

<IfModule mod_negociation.c>
     Options -Multiviews
</IfModule>


<IfModule mod_rewrite.c>
     RewriteEngine On


    # Ce RewriteRule est utilisé pour découvrir dynamiquement le chemin RewriteBase.
    # Voir https://httpd.apache.org/docs/current/mod/mod_rewrite.html
    #rewriterule
    # Ici, nous comparerons le chemin d'accès par répertoire supprimé par rapport au système de fichiers chemin
    # où le fichier .htaccess est lu avec l'URI de la requête.
    #
    # Si une correspondance est trouvée, le chemin du préfixe est stocké dans une variable ENV ultérieurement
    # utilisé pour préfixer correctement l'URI du contrôleur frontal index.php.
    # C'est ce qui permet d'héberger une application Symfony sous un sous-chemin,
    # tel que example.com/sousdossier
    # La condition de réécriture alambiquée signifie :
    # 1. Faites correspondre tous les URI actuels dans RewriteRule et référencez-les en utilisant $0
    # 2. Supprimez la requête uri du chemin par répertoire et utilisez ir comme REQUEST_URI.
    # Ceci est documenté dans https://bit.ly/3zDm3SI("Qu'est-ce qui correspond ?")
    # 3. Évaluez le RewriteCond, en supposant que votre DocumentRoot soit /var/www/html,
    # ce .htaccess se trouve dans le répertoire /var/www/html/public et l'URI de votre requête
    # est /public/hello/world :
    # * Supprimer le préfixe par répertoire : /var/www/html/public/hello/world -> hello/world
    # * application du motif '.' à l'uri 'hello/world'
    # * RewriteCond : input='/public/hello/world::hello/world' pattern='^(/.+)/(.)::\2$' => correspondant
    # 4. Exécutez la RewriteRule :
    # * Le %1 dans l'indicateur RewriteRule E=BASE:%1 fait référence au premier groupe capturé dans RewriteCond ^(/.+)/(.*)
    # * définition de la variable d'environnement 'BASE' sur '/public'


    RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.)::\2$
    RewriteRule . - [E=BASE:%1]


    # Définit l'en-tête HTTP_AUTHORIZATION supprimé par Apache


    RewriteCond %{HTTP:Authorization} .+
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]
    #Supprime la partie /index.php/ d'une URL, si elle est présente


    RewriteCond %{ENV:REDIRECT_STATUS} =""
    RewriteCond %{HTTPS} off
    RewriteRule ^index.php(?:/(.*)|$) https://%{ENV:BASE}/$1 [R=301,L]


    # Si le nom de fichier demandé existe, servez-le simplement.
    # Sinon, réécrivez toutes les autres requêtes sur le contrôleur frontal.


    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>


<IfModule !mod_rewrite.c>
   <IfModule mod_alias.c>
    # Lorsque mod_rewrite n'est pas disponible, nous ordonnons une redirection temporaire
    # au contrôleur frontal explicitement pour que le site Web


    RedirectMatch 307 ^/$ /index.php/


   </IfModule>
</IfModule>

Avec ce fichier vous aurez une redirection fonctionnelle et de belle urls !

liste des articles