L’idée est de ne plus accéder au backend de notre site web en utilisant backend.php dans l’url, mais de passer par un sous domaine.
- http://www.super-website.com → frontend
- http://admin.super-website.com → backend
Supposons que mon projet Symfony se trouve dans /home/public_html/.
Commençons par ajouter un vhost pour définir le sous domaine dans Apache. On précise au sous domaine que le fichier index pour ce sous domaine sera backend.php à l’aide de la directive DirectoryIndex.
<VirtualHost *:80> ServerName admin.super-website.fr DocumentRoot "/home/public_html/web" DirectoryIndex backend.php <Directory "/home/public_html/web"> AllowOverride All Allow from All </Directory> Alias /sf /home/public_html/lib/vendor/symfony/data/web/sf <Directory "/home/public_html/lib/vendor/symfony/data/web/sf"> AllowOverride All Allow from All </Directory> </VirtualHost> |
Ensuite il faut modifier le .htaccess de Symfony afin qu’il redirige les requêtes http du sous domaine vers le fichier backend.php.
Options +FollowSymLinks +ExecCGI <IfModule mod_rewrite.c> RewriteEngine On # uncomment the following line, if you are having trouble # getting no_script_name to work #RewriteBase / # we skip all files with .something #RewriteCond %{REQUEST_URI} \..+$ #RewriteCond %{REQUEST_URI} !\.html$ #RewriteRule .* - [L] # we check if the .html version is here (caching) RewriteRule ^$ index.html [QSA] RewriteRule ^([^.]+)$ $1.html [QSA] # redirect to the backend web controller RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{HTTP_HOST} ^admin.* RewriteRule ^(.*)$ backend.php [QSA,L] # no, so we redirect to our front web controller RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] </IfModule> |
Au niveau de la config Symfony, nous pouvons maintenant masquer le nom du script dans les urls du backend:
# apps/backend/config/settings.yml prod: .settings: no_script_name: true ... |
Et pour finir ne pas oublier de vider le cache =), le backend est maintenant accessible sur http://admin.super-website.com.