3
443

Un seul point d'entrée pour tout le site web

Dans ce chapitre, nous allons configurer le serveur Apache pour que toutes les requêtes vers le site soient redirigées vers un seul fichier : index.php.

Pour tester le résultat en ligne, entrez http://www.frasq.org/cms/site0 dans la barre d'adresse de votre navigateur. Essayez plusieurs URLs à partir de http://www.frasq.org/cms/site0 comme http://www.frasq.org/cms/site0/page.php?q=foo#bar. Toutes renvoient le même chemin.

Vérifiez que le module rewrite est bien activé par Apache. Sous Linux, cherchez la ligne suivante dans httpd.conf :

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

NOTE : Selon les distributions, la configuration d'Apache est souvent répartie dans plusieurs fichiers et vous devrez probablement suivre les directives Include jusqu'à ce que vous trouviez le bon.

Sous Windows, la directive de chargement du module est un peu différente :

LoadModule rewrite_module modules/mod_rewrite.so

Les versions récentes d'Apache groupent toutes les directive LoadModule dans le répertoire /etc/apache2/mods_available. Créez un lien vers le fichier /etc/apache2/mods_available/rewrite.load dans le répertoire /etc/apache2/mods_enabled :

$ cd /etc/apache2/mods-enabled
$ sudo ln -s ../mods-available/rewrite.load .

Vous pouvez aussi lancer la commande a2enmod et répondre rewrite à la question.

Créez un dossier appelé cms directement à la racine des documents de votre serveur web, en général dans le répertoire /var/www. NOTE : Vérifiez la directive DocumentRoot dans la configuration d'Apache.

Créez un dossier site0 dans /cms. Ce site initial aura les fichiers suivants :

  1. /cms/site0
    1. index.php
    2. dump.php
    3. robots.txt
    4. sitemap.xml
    5. favicon.ico
    6. .htaccess

Créez un fichier appelé .htaccess dans site0 avec le contenu suivant :

  1. SetEnv PHP_VER 5
  2. SetEnv REGISTER_GLOBALS 0
  3.  
  4. Options -Indexes
  5. Options +FollowSymLinks
  6.  
  7. ErrorDocument 404 /index.php
  8.  
  9. RewriteEngine On
  10. RewriteRule ^(.*)$ index.php [QSA,L]

NOTE : Ne tapez pas les numéros de ligne.

La ligne 1 indique à Apache que le code du site a été écrit pour la version 5 de PHP. La ligne 2 tente de mettre la variable register_globals à false. NOTE : Un fournisseur internet peut avoir une configuration par défaut avec PHP 4 et register_globals à true. La ligne 4 interdit la génération par Apache de la liste du contenu d'un répertoire. La ligne 5 permet de suivre les liens symboliques. La ligne 7 redirige les erreurs d'adressage vers index.php. La ligne 9 met le moteur de redirection en marche. IMPORTANT : Si le module rewrite d'Apache n'est pas activé, cette directive échoue. Tout le fonctionnement du site en dépend. Vérifiez dans le journal des erreurs /var/log/apache2/error.log. La règle définie à la ligne 10 renvoie tous les chemins - ^(.*)$ - sur index.php.

Créez un fichier appelé index.php dans site0 avec le contenu suivant :

  1. <?php
  2. error_reporting(E_ALL | E_STRICT);
  3.  
  4. require_once 'dump.php';
  5.  
  6. dump($_SERVER['REQUEST_URI']);
  7. dump($_SERVER['SCRIPT_NAME']);

index.php règle le niveau de rapport des erreurs de PHP en appelant error_reporting et charge le code de la fonction dump. Le reste du programme affiche la requête HTTP originale et le nom du script récrit par Apache.

NOTE : Ne pas fermer une balise <?php avec une balise ?> à la fin d'un fichier source PHP protège d'une insertion involontaire d'un espace ou d'une ligne vide dans le flot de sortie.

La fonction dump est définie dans le fichier dump.php :

  1. function dump($var, $label=null, $echo=true) {
  2.     $label = ($label===null) ? '' : rtrim($label) . '=';
  3.  
  4.     ob_start();
  5.     var_dump($var);
  6.     $output = ob_get_clean();
  7.  
  8.     // remove newlines and tabs
  9.     $output = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $output);
  10.     if (PHP_SAPI == 'cli') {
  11.         $output = PHP_EOL . $label . $output . PHP_EOL;
  12.     }
  13.     else {
  14.         $output = htmlspecialchars($output, ENT_QUOTES, 'UTF-8');
  15.  
  16.         $output = '<pre>' . PHP_EOL . $label . $output . '</pre>'. PHP_EOL;
  17.     }
  18.  
  19.     if ($echo) {
  20.         echo $output;
  21.     }
  22.  
  23.     return $output;
  24. }

dump retourne une chaîne de caractères contenant une représentation lisible de $var dans une balise HTML pre. Si $echo vaut true, ce qui est le cas par défaut, la chaîne de caractères est insérée dans le flot de sortie. Assignez un texte à $label, typiquement un nom de variable, pour identifier la sortie.

Entrez http://localhost/cms/site0 dans la barre d'adresse de votre navigateur.

string(17) "/cms/site0/"

string(26) "/cms/site0/index.php"

Essayez http://localhost/cms/site0/search?q=foobar :

string(32) "/cms/site0/search?q=foobar"

string(26) "/cms/site0/index.php"

Placer des fichiers appelés robots.txt et sitemap.xml à la racine d'un site, donne des informations aux moteurs de recherche. WIKI : robots.txt et sitemap.xml.

  1. User-agent: *
  2. Sitemap: http://www.frasq.org/sitemap.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  3.     <url>
  4.         <loc>http://www.frasq.org/fr/accueil</loc>
  5.         <lastmod>2010-05-13</lastmod>
  6.         <changefreq>daily</changefreq>
  7.         <priority>1.0</priority>
  8.     </url>
  9.     <url>
  10.         <loc>http://www.frasq.org/en/home</loc>
  11.         <lastmod>2010-05-13</lastmod>
  12.         <changefreq>daily</changefreq>
  13.         <priority>1.0</priority>
  14.     </url>
  15. </urlset>

Entrez http://localhost/cms/site0/robots.txt dans la barre d'adresse de votre navigateur. Le serveur ne retourne pas le contenu attendu. Rappelez-vous que le fichier .htaccess redirige toutes les requêtes sur index.php, qui renvoie toujours le même document. Pour autoriser un accès direct à certains fichiers, ajoutez une règle dans .htaccess :

  1. RewriteEngine On
  2. RewriteRule ^(favicon\.ico|robots\.txt|sitemap\.xml) - [NC,L]
  3. RewriteRule ^(.*)$ index.php [QSA,L]

La ligne 10 dit que les chemins favicon.ico, robot.txt et sitemap.xml ne sont pas modifiés.

Maintenant, si vous entrez http://localhost/cms/site0/robots.txt, Apache retourne bien le document demandé :

User-agent: *
Sitemap: http://www.frasq.org/sitemap.xml

Essayez l'adresse http://localhost/cms/site0/sitemap.xml.

N'oubliez pas d'ajouter l'icône du site web. WIKI : favicon.ico.

Commentaires

Le 3 avril 2011 à 15:55 par frasq 

Lisez l'article Les outils du développeur web par frasq pour installer et sécuriser un serveur web avec Apache, MySQL, PHP et phpMyAdmin mais aussi préparer le chiffrement des communications avec OpenSSL, configurer un serveur de courrier local avec Postfix et Dovecot, gérer le site en ligne avec SSH et Rsync, centraliser le code source avec Git, limiter l'utilisation de l'espace disque avec les quotas, monter un serveur de noms local avec Bind ou encore surveiller l'activité du serveur web avec Nagios.

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].