OVH Community, votre nouvel espace communautaire.

Rewriterule page php


baladeornitho
02/12/2006, 08h56
Enfin résolu !

En fait mon code était parfaitement bon et le truc c'était simplement de changer le lien dans la page appelante !!!!!!!!!!

visualight
26/11/2006, 13h42
Allais lançons nous ...

> L'url rewriting

// Installation

Le module Url rewriting est fourni par Apache, il est donc nécessaire de l'avoir installé sur son serveur. Pour pouvoir l'utiliser, vous devez l'activer dans le fichier de configuration httpd.conf.

Dans ce fichier, il y a deux lignes à décommenter, pour cela il suffit d'enlever le # en début de ligne.

Voici les lignes à trouver :

Code:
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c
Verifiez pour la première ligne, que le chemin fourni vers le fichier mod_rewrite.so est bien le dossier qui contient les extensions apache.
Une fois le fichier de configuration édité, vous pouvez tester puis redémarrer le serveur, à partir des commandes :

Code:
apachectl -configtest 
et 
apachectl -restart
Nous pouvons maintenant effectuer un premier test. Créez un fichier rewrite.php disponible à partir d'apache, puis dans le même dossier, un fichier .htaccess contenant ces lignes :

Code:
RewriteEngine on
RewriteRule ^(test|essai)\.html$ /rewrite.php
Dans votre navigateur, accédez maintenant successivement aux fichiers rewrite.php, test.html puis essai.html. Si le module Url Rewriting est bien opérationnel, vous devriez voir à chaque fois le même fichier, et surtout pas d'erreur 404 (fichier introuvable) ou 500 (Erreur serveur).

// Premiers essais

Nous allons commencer par expliquer le code du fichier .htaccess du dessus.

Code:
RewriteEngine on
RewriteRule ^(test|essai)\.html$ /rewrite.php
La commande RewriteEngine on demande simplement à apache d'activer son module Url Rewriting.

RewriteRule indique que nous allons créer une règle d'analyse d'url. La partie avant l'espace indique le format de l'url entrée, l'autre indique l'adresse du fichier réellement sur le serveur.

Les règles s'écrivent avec la syntaxe des expressions régulières (ou regex), nous allons étudier sommairement quelques bases.

Les symboles courants :

* ^ : indique que nous sommes en début de ligne, ou au début de la chaîne de caractères. Cependant, entre crochets, la signification est différente.
* $ : indique lui que nous sommes en fin de ligne, ou de chaîne.
* . : remplace tout caractère inconnu
* \ : échape un caractère utilisé dans la syntaxe regex.
Par exemple, pour utiliser un point, la syntaxe est \.

Nous allons utiliser un petit exemple plus concret ...

Nous voulons rediriger le visiteur qui tape php3.html, php4.html et php5.html vers une page unique page.php?sujet=php.

Nous pourrions utiliser cette syntaxe :

Code:
RewriteEngine on
RewriteRule ^php3\.html$ /page.php?sujet=php
RewriteRule ^php4\.html$ /page.php?sujet=php
RewriteRule ^php5\.html$ /page.php?sujet=php
Mais elle n'est pas très pratique dès que nous souhaitons compliquer un peu plus l'affaire. Nous utilisons donc le caractère "Jocker" .

Code:
RewriteEngine on
RewriteRule php.\.html$ /page.php?sujet=php
Cette syntaxe est tout à fait correcte, le visiteur pourrais taper php[nimporte quel caractère].html, il serai revoyé vers la page souhaitée. Nous souhaitons maintenant filtrer, pour arriver à notre but initial, utiliser les adresses php3.html, php4.html ou php5.html.

Il faut pour cela utiliser d'autres caractères clés :
[] : un ensemble de crochet correspond à un ou plusieurs caractères, qui pouraient être l'un de ceux entre ces crochets.

Pour notre exemple :

Code:
RewriteRule ^php[345]\.html$ \page.php?sujet=php
Second exemple, nous souhaitons que la page [quelquechose].html mène vers page.php?sujet=[ce quelquechose].

Nous ne savons pas ce que pourrais être le "quelquechose" en question, il faut donc utiliser la syntaxe :

( ) : la chaîne de caractères comprise entre les deux parenthèses peut être réutilisée dans la seconde occurence avec les variables $n ou //n, où n est le numero de la parenthèse

Code:
RewriteRule ^(.+)\.html$ \page.php?sujet=$1
Un nouveau signe est ici apparu, +. Il fait partie d'un ensemble, qui détermine le nombre de caractères que remplacent les parenthèses ou crochets qui le précède.

Les symboles sont :

* ? : correspond à 0 ou 1 caractère.
* * : 0 caractères ou plus
* + : 1 caractère ou plus
* {n} : n caractères
* {n,} : n caractères ou plus
* {n,m} : entre n et m caractères

Donc, pour notre exemple, (.+) correspond à un caractère (n'importe lequel/lesquels) ou plusieurs.

Il reste un dernier symbole important. Le symbole |, qui correspond à l'opérateur logique "ou".

Par exemple, ou souhaite que les pages [html OU php].html affichent page.php?sujet=[html OU php].

On utilise alors la règle :

Code:
Rewrite Rule ^(html|php)\.html$ /page.php?sujet=$1
Vous pouvez consulter une page "mémo" disponible sur le site expreg.com.


// Réécriture conditionnelle

La réécriture conditionnelle est souvent utilisée par exemple pour bannir une IP, ou protèger vos images pour qu'il soit impossible de les afficher à partir d'un autre site que le votre.

La commande est RewriteCond, par exemple :

Code:
#Rediriger une adresse ip
RewriteCond %(REMOTE_ADDR) ^127.0.0.1$
RewriteRule .* /interdit.html
L'adresse ip 127.0.0.1 sera, quelque soit l'adresse tapée (.*) redirigé vers inderdit.php.

Code:
#rediriger les utilisateurs d'internet explorer vers le site de mozilla :
RewriteCond %(HTTP_USER_AGENT) MSIE
RewriteRule .* http://www.mozilla.org
Code:
#Interdire l'affichage des images si ce n'est pas sur mon site :
#Ciao Ciao Robot de recherche d'image Google, yahoo, ... ;)
RewriteCond %(HTTP_HOST) [^(http://www.martiusweb.net)]
RewriteRule (.+)\.(jpg|gif|png)^ /interdit.$1
#Il faut créer les images interdit.jpg, inderdit.gif et inderdit.png
Les masques à connaître sont :

* %(HTTP_USER_AGENT) : Contient notemment le naviguateur et le système d' exploitation
* %(HTTP_REFERER) : La page (si elle est renseignée) d' ou vient votre visiteur
* %(HTTP_HOST) : Le domaine
* %(REQUEST_FILENAME) : La page qui a été demandée
* %(REMOTE_ADDR) : L' adresse IP

A vous maintenant d'expérimenter vos expressions régulières.
Tutorial librement inspiré du tutorial Url Rewriting de expreg.com


@+

baladeornitho
26/11/2006, 08h47
J'essaie de rediriger des pages php vers une url html mais sans succès. A prioris c'est la 5è ligne que ne marche pas et probablement le caractères ? qui pose problème:

Options +FollowSymlinks
RewriteBase /
RewriteEngine on
RewriteRule ^frsp.php?sp=([0-9]*)$ http://www.baladeornithologique.com/php/frsp$1\.html [R=301,L]
RewriteRule ^frsp([0-9]*)\.html$ /php/frsp.php?sp=$1 [L]

Si quelqu'un à le secret du rewriterule des pages php en html je suis preneur !