Configuration Apache : .htaccess vs Virtual Host

Si votre site internet est sur un hébergement mutualisé, sur lequel vous n’avez pas accès aux fichiers de configuration Apache, vous n’avez pas d’autre choix que d’utiliser un fichier .htaccess. Si par contre vous avez un serveur dédié ou votre propre Home Server (cf Héberger son propre serveur à la maison), vous avez la possibilité d’utiliser le fichier de configuration global Apache ou celui de votre Virtual Host.

Comparatif des deux solutions

Le fichier .htaccess

Positionné à la racine de votre répertoire web (ex : /var/www/monSiteInternet/.htaccess ), ils permettent de surcharger les règles de configuration apache de façon distribuée.

Avantages :

  • Si plusieurs personnes travaillent sur le projet et que l’équipe utilise Git (ou autre), cela permet de partager la configuration facilement et efficacement.
  • Sur un serveur mutualisé, passer par un fichier .htaccess est la seule possibilité.
  • Les modifications de configuration sont prises en compte sans redémarrer le serveur Apache.

Inconvénients :

  • Impact sur les performances : les fichiers .htaccess sont lus à chaque requête, ce qui a un effet négatif sur la vitesse de chargement de vos pages. De plus, lorsqu’ils sont utilisés, Apache va chercher dans le répertoire courant si un .htaccess est présent, puis il va répéter la même opération dans le répertoire parent… et ainsi de suite.

La configuration Virtual Host

La configuration de vos Virtual Host se situe au niveau serveur, dans le répertoire (sur Debian) /etc/apache2/sites-availables/*.conf . Il est possible d’y mettre les éléments de configuration contenus jusque-là par le .htaccess.

Avantages :

  • La configuration étant déclaré au niveau serveur, il n’y a pas de risque qu’elle soit écrasée ou altérée lors d’un redéploiement de votre site.
  • Meilleurs performances : votre serveur apache ne va pas chercher et lire vos fichiers .htaccess à chaque requête.

Inconvénients :

  • Chaque modification de configuration impliquera un redémarrage du serveur Web Apache.

Mise en place : exemple de configuration WordPress

Cas de fichier .htaccess standard WordPress

La partie WordPress de base est contenue entre « BEGIN WordPress » et « END WordPress ». Les éléments suivants sont décrits dans l’article Configurer un fichier .htaccess pour WordPress.

# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

#Block wp-config.php visibility
<Files wp-config.php>
order allow,deny
deny from all
</Files>
#End Block

# Hide server informations
ServerSignature Off

La même configuration mais cette fois-ci dans un fichier de configuration Virtual Host

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin admin@monSite.com
    ServerName monSite.com
    ServerAlias www.monSite.com
    DocumentRoot /var/www/monSite.com/

    # Custom logs
    ErrorLog ${APACHE_LOG_DIR}/monSite/error.log
    CustomLog ${APACHE_LOG_DIR}/monSite/access.log combined

    #Block wp-config.php visibility
    <Files wp-config.php>
      order allow,deny
      deny from all
    </Files>

    <Directory "/var/www/monSite.com/">
                <IfModule mod_rewrite.c>
                RewriteEngine On
                RewriteBase /
                RewriteRule ^index\.php$ - [L]
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteRule . /index.php [L]
                </IfModule>
    </Directory>

    # SSL Cert details
    SSLCertificateFile /etc/letsencrypt/live/monSite.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/monSite.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

La ligne « ServerSignature Off » est quant à elle définie dans le fichier /etc/apache2/security.conf :

#
# Optionally add a line containing the server version and virtual host
# name to server-generated pages (internal error documents, FTP directory
# listings, mod_status and mod_info output etc., but not CGI generated
# documents or custom error documents).
# Set to "EMail" to also include a mailto: link to the ServerAdmin.
# Set to one of:  On | Off | EMail
ServerSignature Off
#ServerSignature On

Ne pas oublier de relancer le serveur :
sudo systemctl reload apache2

Partager sur :