- User-agent: *
- Sitemap: http://www.frasq.org/sitemap.xml
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 :
- /cms/site0
- index.php
- dump.php
- robots.txt
- sitemap.xml
- favicon.ico
- .htaccess
Créez un fichier appelé .htaccess dans site0 avec le contenu suivant :
- SetEnv PHP_VER 5
- SetEnv REGISTER_GLOBALS 0
- Options -Indexes
- Options +FollowSymLinks
- ErrorDocument 404 /index.php
- RewriteEngine On
- 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 :
- <?php
- error_reporting(E_ALL | E_STRICT);
- require_once 'dump.php';
- dump($_SERVER['REQUEST_URI']);
- 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 :
- function dump($var, $label=null, $echo=true) {
- $label = ($label===null) ? '' : rtrim($label) . '=';
- ob_start();
- var_dump($var);
- $output = ob_get_clean();
- // remove newlines and tabs
- $output = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $output);
- if (PHP_SAPI == 'cli') {
- $output = PHP_EOL . $label . $output . PHP_EOL;
- }
- else {
- $output = htmlspecialchars($output, ENT_QUOTES, 'UTF-8');
- $output = '<pre>' . PHP_EOL . $label . $output . '</pre>'. PHP_EOL;
- }
- if ($echo) {
- echo $output;
- }
- return $output;
- }
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.
- <?xml version="1.0" encoding="UTF-8"?>
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
- <url>
- <loc>http://www.frasq.org/fr/accueil</loc>
- <lastmod>2010-05-13</lastmod>
- <changefreq>daily</changefreq>
- <priority>1.0</priority>
- </url>
- <url>
- <loc>http://www.frasq.org/en/home</loc>
- <lastmod>2010-05-13</lastmod>
- <changefreq>daily</changefreq>
- <priority>1.0</priority>
- </url>
- </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 :
- RewriteEngine On
- RewriteRule ^(favicon\.ico|robots\.txt|sitemap\.xml) - [NC,L]
- 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