Date de publication: le vendredi 27 avril 2007 à 16h01
Dernière modification: par Pascal BOYER le mercredi 6 mai 2009 à 19h41
« Article précédent: MySQL : sauvegarder et restaurer une base de données
» Article suivant: eZ Publish : Rediriger les messages d'erreur
Dans cet article vous trouverez:
- la marche à suivre pour supprimer index.php des URI produites par eZ publish,
- la marche à suivre pour supprimer le nom du siteaccess des URI produites par eZ publish,
- quelques exemples de règle de réécriture d'URI.
Rewriting : définition (réécriture d'URL)
Voici quelques informations tirée ce cet article de developpez.com: La réécriture d'URL avec Apache
- Le serveur Apache offre plusieurs moyens pour transformer ses liens (les adresses http qui s'affichent dans la barre d'URI de notre navigateur) afin deles rendre plus lisibles mais aussi d'augmenter la sécurité liée à l'apparition du nom de paramètres éventuellement présents dans les URI.
- Un URI formaté sera beaucoup plus facile à retenir que les URI incompréhensibles et à rallonge qui s'affichent dans la barre d'adresses du navigateur.
- Les robots peuvent avoir des difficultés pour suivre des URLs exotiques.
- La technique de l' URI rewriting, consiste à transformer les URI contenant des ? et des & en URI plus facilement lisibles par un robot.
- Enfin, la principale raison de la mise en place d'un tel système est la sécurité. Lorsque nous utilisons des liens composés, nous voyons apparaître des valeurs, mais surtout des noms de variables, qui sont autant de portes dérobées permettant à certains de s'introduire dans notre système (le serveur). Prenons un exemple extrême pour illustrer ceci: un script qui permettrait de visualiser le source d'un fichier du serveur en passant celui-ci en paramètre http://www.monsite.com/index.php?fichier=test.txt pourrait être détourné afin de récupérer un fichier système
http://www.monsite.com/index.php?fichier=/etc/fstab
Bien sur, cet exemple est un cas extrême et simpliste que je vous invite à ne jamais reproduire.
Le but de l' URI rewriting est donc d'intercepter côté serveur l'adresse de la page demandée, d'en extraire les paramètres, et de renvoyer côté client la page correspondante ( qui n'a pas d'équivalent physique sur le serveur).
Voici une adresse de départ (c'est à dire l'adresse réelle): http://www.monsite.com/index.php?section=1&page=2&langue=fr&print=no et voici l'adresse que voit le visiteur du site: http://www.monsite.com/rubrique_page_langue_imprimer.html
Une ligne de règle de réécriture est composée de 3 parties (et dans cet ordre):
- l'instruction RewriteRule
- l'URL à réécrire
- l'URL réécrite.ou bien, on peut le dire comme ceci:
- RewriteRule motifTesté substitutionAppliquée [drapeau]
Voici un lien vers une doc sur les regexp: http://cyberzoide.developpez.com/php4/regex/
Définir un hôte virtuel dans apa che2.conf
Voici ce qu'il faut mettre:
NameVirtualHost 89.151.30.31:80 # Ci-dessous, je mets en place l'accès NON-SÉCURISÉ pour l'ensemble du site. <VirtualHost 89.151.30.31:80> ServerName "www.luxpopuli.fr" DocumentRoot "/usr/local/www" <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^/luxpopuli$ http://www.luxpopuli.fr/index.php/luxpopuli [L,R=301] RewriteRule ^/siteaccess_public$ http://www.luxpopuli.fr/index.php/siteaccess_public [L,R=301] </IfModule> </VirtualHost>
Les deux lignes vraiment importantes sont:
RewriteRule ^/luxpopuli$ http://www.luxpopuli.fr/index.php/luxpopuli [L,R=301]
et
RewriteRule ^/siteaccess_public$ http://www.luxpopuli.fr/index.php/siteaccess_public [L,R=301]
car ce sont les règles de réécriture.
:
RewriteEngine On s'utilise une seule fois dans le fichier .htaccess, quel que soit le nombre de règles utilisées.
:
Pour l'instant aucune modification ne doit être apportée à un quelconque fichier de eZP.
- Si on veut que l'URI http://www.luxpopuli.fr/sitaccess renvoie vers (affiche la même chose que) http://www.luxpopuli.fr/index.php/sitaccess alors la règle est:
RewriteRule ^/siteaccess$ http://www.luxpopuli.fr/index.php/siteaccess [L,R=301]
:
Si on met un / après siteaccess alors on obtient un message d'erreur !
- Si on veut que l'URI http://www.monsite.fr/sitaccess / renvoie vers (affiche la même chose que) http://www.monsite.fr/index.php/sitaccess alors la règle est:
RewriteRule ^/siteaccess/$ http://www.luxpopuli.fr/index.php/siteaccess [L,R=301]
:
Si on oublie de mettre le / après siteaccess alors on obtient un message d'erreur !
- Si on veut pourvoir utiliser indifféremment: http://www.monsite.fr/sitaccess/ ou http://www.monsite.fr/sitaccess pour accéder à (pour afficher la même chose que): http://www.monsite.fr/index.php/sitaccess alors la règle est la suivante:
RewriteRule ^/siteaccess* http://www.luxpopuli.fr/index.php/siteaccess [L,R=301]
ou bien on peut simplifier la syntaxe
RewriteRule ^/siteaccess* /index.php/siteaccess [L,R=301]
- Si on veut supprimer index.php (même en multisites ! ):
RewriteRule ^/mpt/* /index.php RewriteRule ^/allobroges/* /index.php
:
Et on n'a besoin de toucher à aucun fichier de eZP !!!!
Supprimer le siteaccess des URI de eZ publish
Pour le siteaccess par défaut uniquement
La méthode très simple décrite ci-dessous permet de supprimer l'affichage du nom du siteaccess dans les URI de eZ publish. Mais ceci ne sera valable que pour le siteaccess défini comme siteaccess par défaut, c'est à dire celui défini par le paramètre DefaultAccess de la section [SiteSettings] du fichier de configuration override/ site.ini.append.php. Ceci ne sera donc pas valable pour le siteaccess d'administration.
Le paramètre à configurer est:
RemoveSiteAccessIfDefaultAccess=enabled
de la section [SiteAccessSettings] du fichier override/ site.ini.append.php.
Ensuite on vide les caches.
:
Il est intéressant de remarquer que les URI incluant quand même le nom du siteaccess continuent à fonctionner.
Supprimer index.php des URI de eZ publish
Avec le fichier .htaccess
Si nous n'avons pas accès au fichier de configuration du serveur Apache, il nous est tout de même possible de configurer le fichier .htaccess placé à la racine du répertoire d'installation de eZ publish afin de supprimer l'affichage du fichier index.php des URI créés par eZ publish.
Ceci sera valable pour les URI du site public comme pour celles du site d'administration.
Un post de référence: htaccess (removing index.php) and online editor
A partir des indications contenues dans ce post nous pouvons parvenir à supprimer index.php des URI en mettant:
RewriteEngine On RewriteRule ^var/storage/.* - [L] RewriteRule ^var/[^/]+/storage/.* - [L] RewriteRule ^var/cache/texttoimage/.* - [L] RewriteRule ^var/[^/]+/cache/texttoimage/.* - [L] RewriteRule ^design/[^/]+/(stylesheets|images|imagespl|javascript)/.* - [L] RewriteRule ^share/icons/.* - [L] RewriteRule ^sitemaps/.* - [L] RewriteRule ^extension/[^/]+/design/[^/]+/(stylesheets|images|javascripts?)/.* - [L] RewriteRule ^extension/tracewatch/.* - [L] RewriteRule ^packages/styles/.+/(stylesheets|images|javascript)/[^/]+/.* - [L] RewriteCond $1 !^index.php$ RewriteRule (.*) /index.php
dans le .htaccess et en positionnant:
ForceVirtualHost=true
dans la section [SiteAccessSettings] du fichier de configuration override/ site.ini.append.php puis en vidant tous les caches.
La méthode présentée ci-dessus n'engendre aucun problème avec le Online Editor.
:
Il est important de retenir que nous devons ajouter une ligne RewriteRule chaque fois que le système doit accéder à un répertoire. Par exemple, supposons que nous placions des images dans un répertoire IMG/ situé à la racine de notre site. Pour que le système puisse accéder à ces images, il est indispensable d'ajouter cette ligne:
RewriteRule ^IMG/.* - [L]
Voici le contenu partiel du fichier override/ site.ini.append.php
[SiteSettings] DefaultAccess=siteaccess_public SiteList[]=siteaccess_public [SiteAccessSettings] ForceVirtualHost=true AvailableSiteAccessList[]=siteaccess_public AvailableSiteAccessList[]=siteaccess_admin MatchOrder=uri HostMatchMapItems[] RemoveSiteAccessIfDefaultAccess=enabled
Commentaires














