URL Rewriting pour EasyPHP et Apache2

Le URL Rewriting (en français : réécriture d’URL) permet à un site Web dynamique d’avoir des adresses URL "propres" et pertinentes.

Dans cet article, nous allons voir à quoi sert la réécriture d’URL, et comment la mettre en place sur son serveur apache.


Pourquoi la réécriture d’URL?

Normalement, une adresse URL d’un site dynamique ressemble en vérité à ceci :


http://blog5643.com/index.php?section=1&cat=5&article=12&p=2

Mais si nous dictons une règle de réécriture au serveur, cette URL pourrait être interprétée de la même façon :


http://blog5643.com/1-Technologie/5-Web/12-Comment-faire-son-propre-blog/page-2

La réécriture d’URL est pas mal du tout pour obtenir un meilleur référencement auprès de notre ami Google. Si vous souhaitez faire de la réécriture d’URL sur votre serveur local à la maison, il vous faudra probablement activer le module de réécriture d’URL (nommé mod_rewrite) d’Apache. Ce n’est pas une procédure très complexe, mais il y a matière à se casser la tête.

Voici dont comment activer mod_rewrite si vous utilisez EasyPHP ou Apache2 en serveur dédié. Prenez note que si vous utilisez MAMP ou MAMP PRO, le module mod_rewrite est déjà présent et activé.

La seule différence entre l’activation du module mod_rewrite pour EasyPHP 1.8 et la pour EasyPHP 2 est que dans la version 2, il n’y qu’une ligne à enlever en commentaire.

Activer mod_rewrite avec EasyPHP 2

Effacez le dièse (#) devant les lignes suivantes, dans la configuration d’EasyPHP, qui se trouve dans le fichier httpd.conf (Menu e/Configuration/Apache dans EasyPHP) :


LoadModule rewrite_module modules/mod_rewrite.so

Ensuite, toujours dans le même fichier de configuration, recherchez la balise <Directory> correspondant à votre site. Ça devrait ressembler à ça :



#
# Possible values for the Options directive are « None », « All »,
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that « MultiViews » must be named *explicitly* — « Options All »
# doesn’t give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be « All », « None », or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None

#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all


Vous voyez « AllowOverride None »? Changez-le pour « AllowOverride All ». Cette petite modification va dire au serveur apache de prendre en compte le fichier .htaccess. Sans ce changement, votre fichier .htaccess sera ignoré par le serveur.

Activer mod_rewrite avec EasyPHP 1.8

Décommentez les 2 lignes suivantes (effacez le dièse # devant la ligne) dans la configuration d’EasyPHP, httpd.conf (Menu e/Configuration/Apache dans EasyPHP)


LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c

Cherchez également dans le même fichier :


#
# This may also be « None », « All », or any combination of « Indexes »,
# « Includes », « FollowSymLinks », « ExecCGI », or « MultiViews ».
#
# Note that « MultiViews » must be named *explicitly* — « Options All »
# doesn’t give it to you.
#
Options Indexes FollowSymLinks Includes

#
# This controls which options the .htaccess files in directories can
# override. Can also be « All », or any combination of « Options », « FileInfo »,
# « AuthConfig », and « Limit »
#
AllowOverride All

#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all

Prenez garde à ce que AllowOverride All soit bien configuré à ALL et pas à NONE.

Dans la version 1.8 d’Easyphp, il est déjà à ALL, mais dans la version 2.0 d’EasyPHP, nous sommes obligés de le changer à la main. Attention, si AllowOverride n’est pas bel et bien configuré à ALL, le fichier .htaccess ne peut pas être pris en compte par le serveur apache, alors c’est très important (et simple)!

Activer mod_rewrite avec Apache2 (serveur dédié)

La procédure est très simple. Lancez la console (Pour les Macs, c’est Terminal dans les utilitaires système des Applications) et tapez ceci :


a2enmod rewrite

Il faut ensuite modifier un peu la configuration du serveur Apache, pour qu’il n’ignore pas le .htaccess. On ouvre le fichier de configuration :


sudo nano /etc/apache2/apache2.conf

Trouvez la balise <Directory> correspondant à votre site. Dans cette balise, recherchez AllowOverride None, et modifiez-le en inscrivant AllowOverride All.


/etc/apache2/sites-enabled/

Il est possible qu’il y ait un fichier par défaut, dans ce cas il sera probablement nommé 000-default.

Une fois vos modifications sauvegardées, redémarrez le serveur.


/etc/init.d/apache2 reload

Comment tester si la réécriture d’URL est réellement activée

Vérification de la présence du module de réécriture sur le serveur

C’est très simple, écrivez

phpinfo();

dans un fichier PHP, puis vérifiez que « mod_write » y est. Si ce n’est pas le cas, il y a quelque chose qui cloche. Évidemment, ça signifie que la réécriture ne fonctionne pas, révisez les étapes précédentes, vous avez probablement oublié quelque chose.

Créez un fichier .htaccess (le nom du fichier commence par un point), et mettez-le à la racine du site.

Comment nommer un fichier .htaccess correctement, avec son point

Sous Windows, ce point pose un certain problème car cette syntaxe appartient normalement aux fichiers cachés. Il est possible de créer le fichier .htaccess en se servant du bloc-note de Microsoft Windows, en sauvegardant le fichier selon cette syntaxe : ".htaccess" (oui, avec des guillemets!).

Vous pouvez aussi le renommer dans le DOS, par exemple si vous l’aviez sauvegardé en format texte .txt :


ren htaccess.txt .htacces

Règles d’écriture d’URL dans le fichier .htaccess

Insérez ces lignes de code à l’intérieur du fichier .htaccess :

Options +FollowSymlinks
RewriteEngine on

# ————————————————————————-
# > URL REWRITING TEST
# ————————————————————————-

RewriteRule ^try.html$ page_test.html [NC,L]

Créez-vous un fichier qui s’apelle page_test.html, également à la racine du site aux côtés du fichier .htaccess.

Maintenant que la règle d’écriture est écrite, essayez d’accéder à essai.html.

  1. Vous obtenez votre page page_test.html : La réécriture d’URL fonctionne comme il faut !
  2. Vous obtenez une erreur 404 à cause de la page_test.html : Ça fonctionne mais la page page_test.html n’existe simplement pas (pas grave).
  3. Vous obtenez une erreur 404 à propos de essai.html, et que mod_rewrite est bel et bien présent dans la liste du phpinfo() : Votre réécriture ne fonctionne pas. Vérifiez votre configuration Apache! Avez-vous fait les changements, et les avez-vous faits aux bons endroits?
  4. Vous obtenez une erreur 500, et vous testez en local : Votre fichier .htaccess comporte des erreurs dans ses règles de réécriture (pas grave, parce que ça veut aussi dire que votre réécriture fonctionne presque, vérifiez seulement ce que vous avez écrit, faites quelques tests).

Ce message est également disponible en : Anglais

12 réflexions au sujet de « URL Rewriting pour EasyPHP et Apache2 »

  1. Quelqu'un

    je suis avec Mamp j’ai fait un dossier teste placé a la racine du site dans lequel j’ai place un fichier teste.html et un fichier .htaccess dans lequel j’ai inscrit :
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^inconnu\.html$ /teste/teste.html [L]
    puis j’ai appelle ma page par http//www monsite/teste/inconnu.html
    cela aurais du afficher ma page teste.html mais j’ai un no found pour dans mon fichier conf du dossier apache LoadModule rewrite_module modules/mod_rewrite.so est bien activé y t’il quelque chose que je n’ai pas bien fait ou que j’ai oublié

  2. Guy Labbé

    As-tu essayé sans dossier pour commencer; Je suis pas un expert d’expressions régulières disons, mais essaie :
    RewriteRule ^teste/inconnu\.html$ /teste/teste.html [L]
    ou bien :
    RewriteRule inconnu\.html /teste/teste.html [L]

  3. lemaitre

    Bonjour,
    J’ai fait la même manip. et le problème vient du chemin indiqué :
    RewriteRule ^inconnu\.html$ /teste/teste.html [L]
    Puisque les deux fichiers sont dans le même dossier le chemin est simplement:
    RewriteRule ^inconnu\.html$ teste.html [L]
    Si ça peut aider…
    Merci pour ce tuto!

  4. lemaitre

    Loaded Modules core mod_win32 mpm_winnt http_core mod_so mod_actions mod_alias mod_asis mod_auth_basic mod_authn_default mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_dir mod_env mod_include mod_isapi mod_log_config mod_mime mod_negotiation mod_rewrite mod_setenvif mod_php5

    Bonjour,
    EasyPhp 2, voilà l’info de Phpinfo: mode_rewrite à la place de mode_write.

  5. Snoway

    Béni soit Guy Labbé
    Des heures, des jours, de la sueur et des larmes pour enfin arriver a faire fonctionner ce satané Rewriting en local sous Easy Php 5.3.0 !
    Et soudain une lumière divine apparue a la lecture des saintes écritures…
    Guy ! MERCI.

  6. Guy Labbé

    Très heureux d’avoir pu t’être utile avec cet article! Si tu as des infos complémentaires, n’hésite pas à les partager

  7. Gabess

    Ca faisait un bon moment que je me prenais la tête la dessus.
    Ca marche, merci infiniment, tu m’as sauvé la soirée !!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *