Navigation

Related Articles

Back to Latest Articles

Utilisation de VHost pour l’accès au backend


cedric
Utilisation de VHost pour l’accès au...

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.

?View Code CONSOLE
<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.

?View Code CONSOLE
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:

?View Code CONSOLE
# 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.

Show Comments (5)

Comments

  • Manu

    Merci pour l’astuce ! Cependant, comment faites-vous pour accéder à un autre environnement ?

    • Article Author
  • CpNForTehWin

    Merci pour ce post intéressant, je savais comment faire xxxx/administration/* mais pas en utilisant un sous-domaine. Ca fait encore plus pro 🙂

    • Article Author
  • NiKo

    Ça me rappelle un truc 😉 (ping @JeremyB)

    Nice tip.

    • Article Author
  • Éric Rogé

    J’avais parlé de cette méthode il y a un moment sur mon site.

    Voici aussi comment faire si vous êtes sur du mutualisé et que vous n’avez pas accès au httpd.conf

    http://symfony-check.org/permalink/delete-backend-php-from-your-uri

    • Article Author
  • Willemsen Christophe

    Bonjour,

    J’aime bien votre méthode mais effectivement si on a pas accès au sites-available d’apache c’est un peu dur.

    J’avais fait un tuto sur le choix de l’application basée sur le nom de domaine mais je ne l’ai testé qu’en local, dites-moi ce que vous en pensez ?

    http://blog.cwx.be/?p=209

    Bonne soirée

    Christophe

    • Article Author

Recevez nos articles