Page 1 sur 1

[.htaccess] URL rewriting

Posté : 03 mai 2009, 17:52
par Rem73
Bonjour,

Je me trouve avec un problème qui me parait très bizarre, voici mon fichier .htaccess

Code : Tout sélectionner

RewriteEngine on RewriteRule ^connexion\.html\?([a-z0-9]+)$ /tuks_0.0.3/index.php?module=membres&action=connexion&SID=$1 [L]
Et quand je vais à l'adresse : http://localhost/tuks_0.0.3/connexion.h ... 0bd7afe314

Je tombe sur une erreur 404, alors que si je supprime le "?" dans le .htaccess et dans mon URL cela fonctionne très bien

Merci d'avance

Posté : 03 mai 2009, 19:10
par momox
Echappe le ? avec un \, car c'est un caractère reservé.

Posté : 03 mai 2009, 21:28
par Rem73
C'est la première chose qui m'est venu à l'idée et comme tu peux le voir dans mon expression régulière le "?" est déjà échapper :wink:
C'est très bizarre, je crois que c'est le seul métacaractère qui fou la pagaille.

Re: [.htaccess] URL rewriting

Posté : 03 mai 2009, 21:47
par albat

Code : Tout sélectionner

RewriteRule ^connexion\.html\?([a-z0-9]+)$ /tuks_0.0.3/index.php?module=membres&action=connexion&SID=$1 [L] ^ ^ | | celui-là, oui celui-là, non

Posté : 03 mai 2009, 21:51
par Rem73
Le seconde chaine n'est pas une expression régulière donc elle n'a pas besoin d'un échappement :wink:

Enfin c'est ce que je vois ici : http://www.yourhtmlsource.com/sitemanag ... iting.html

Et avec l'échappement ça marche pas non plus ;)


EDIT : Après quelques corrections je remarque que le problème vient des parentaises capturantes qui ne capturent rien du tout
Nouveau fichier :

Code : Tout sélectionner

RewriteEngine on RewriteRule ^connexion\.html\??([a-z0-9]{32})?$ /tuks_0.0.3/index.php?module=membres&action=connexion&SID=$1 [L]
EDIT 2 : J'ai voulu tester mon expression rationnel avec un petit script php :
<?php
$chaine = "connexion.html?8290943366f63b94c8e8860bd7afe314";
if (ereg ("^connexion\.html\?([a-z0-9]{32})$", $chaine, $regs)) {
    echo "$regs[1]";
} else {
    echo "Url invalide : $chaine";
}
?>
Et comme je le pensais il me retour la SID, a croire que c'est pas du POSIX :roll:

EDIT 3 : après pas mal de test en tout genre j'ai pu remarquer que le point d'interrogation n'était plus utilisé comme métacaratère, mais tout bonnement supprimé. Vive Apache :D

Après tout pas besoin de faire des URL dans les règles de l'art, un autre délimiteur que "?" peut-être choisi comme le "&".

Posté : 03 mai 2009, 22:44
par jojolapine
Bonsoir,
Regarde de ce côté: http://corz.org/serv/tricks/htaccess2.p ... -variables
Je suis pas très calé (j'avais bloqué de la même manière sans pouvoir résoudre la dernière fois...), mais je suis à peu près sur qu'on peu pas capturer "normalement" la query string...

Posté : 03 mai 2009, 23:29
par naholyr
La query-string ne peut pas être intégrée à l'url rewriting à ma connaissance. Utilise un autre séparateur que "?" ;)

[edit]
L'excellent lien donné par jojolapine semble dire le contraire, et d'après les infos qu'on y trouve, une solution pourrait être de ce genre :

Code : Tout sélectionner

RewriteEngine On # Condition sur l'URL RewriteCond %{REQUEST_URI} ^/connexion.html # Condition sur la query-string, et capture de sa valeur RewriteCond %{QUERY_STRING} ^([a-z0-9]+)$ # Application de la règle RewriteRule connexion\.html(.*)$ tuks_0.0.3/index.php?module=membres&action=connexion&SID=%1 [L]
[/edit]

Posté : 04 mai 2009, 19:23
par Rem73
Merci de ta réponse,

Sachant que mes liens peuvent contenir plusieurs données en query string et des fois aucunes.

Je préfère changer de délimiteur, surtout que des conditions multiples avec des expression régulière c'est pas TOP question performance.

Merci de votre aide :D