URL rewriting complexe

Eléphanteau du PHP | 12 Messages

07 avr. 2010, 20:07

Bonjour,

Je rencontre un problème lors de la mise en ligne de mon site sur l'hébergeur 1and1.fr. J'ai écris plusieurs règles de réécriture de liens, qui fonctionnent parfaitement sur wamp , mais pas sur 1and1 (enfin pas entièrement).
Pourtant j'ai bien activé l'url rewriting avec le code suivant :
AddType x-mapp-php5 .php

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
Voici le code complet de mon fichier htaccess placé à la racine de mon site:
AddType x-mapp-php5 .php

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z09\-_]*)$ index.php?page=$1  [QSA,L]
RewriteRule ^([a-z09\-_]*)/([A-Z]{1,}[A-Za-z09\-_]+)$ index.php?page=$1&region=$2  [QSA,L]
RewriteRule ^([a-z09\-_]*)/([A-Z]{1,}[A-Za-z09\-_]+)/([A-Z]{1,}[A-Za-z09\-_]+)$ index.php?page=$1&region=$2&dep=$3  [QSA,L]
RewriteRule ^([a-z09\-_]*)/([A-Z]{1,}[A-Za-z09\-_]+)/([A-Z]{1,}[A-Za-z09\-_]+)/([A-Z]{1,}[A-Za-z09\-_]+)$ index.php?page=$1&region=$2&dep=$3&categorie=$4  [QSA,L]
RewriteRule ^([A-Z]{1,}[A-Za-z09\-_]+)$ index.php?region=$1  [QSA,L]
RewriteRule ^([A-Z]{1,}[A-Za-z09\-_]+)/([A-Z]{1,}[A-Za-z09\-_]+)$ index.php?region=$1&dep=$2  [QSA,L]
RewriteRule ^([A-Z]{1,}[A-Za-z09\-_]+)/([A-Z]{1,}[A-Za-z09\-_]+)/([A-Z]{1,}[A-Za-z09\-_]+)$ index.php?region=$1&dep=$2&categorie=$3  [QSA,L]
RewriteRule ^([a-z09\-_]*)/([A-Za-z09\-_]+)$ index.php?page=$1&nom_site=$2  [QSA,L]
Pour traduire un peu:

Lorsqu'un chaine de caractères est tapée sans majuscules, on fait appel à la variable page. Ex: www.monsite.fr/contact
Lorsqu'une majuscule apparait, il s'agit des variables (dans l'ordre) région, département et catégorie (il s'agit d'un annuaire). Ex: www.monsite.fr/presentation/Bretagne/Finistere/Art
Et enfin, lorsque deux chaines de caractères sont entrées, on fait appel à la variable page, puis au nom d'un site. Ex: www.monsite.fr/presentation/site-de-tennis-1

Le problème, c'est que tout fonctionne bien, sauf quand un "-" est entré dans l'adresse, la la page "404 not found" apparait. Alors que tout fonctionne parfaitement sous wamp.

Voila, j'ai préféré vraiment bien détaillé mon problème pour que quelqu'un puisse m'apporter une solution.

Merci beaucoup pour votre aide à venir!

Mammouth du PHP | 661 Messages

07 avr. 2010, 22:17

t'es sur que ça viens du " - " ... ? par ce que là, je ne vois aucune acceptation des chiffre tels que "1" (dans ton exemple)

tu acceptes bien les chiffre 0 et 9 ... mais pas les autres ... 09 => 0-9 ;)

ViPHP
ViPHP | 3607 Messages

08 avr. 2010, 13:51

Bonjour,
pour être sûr que le tiret soit bien interprété dans une classe, il faut le mettre à la fin, comme suis:

Code : Tout sélectionner

[a-z0-9_-] = les lettres de a à z, les chiffres de 0 à 9 l'underscore et le tiret
;)