Url-rewriting et wampserver 2

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

19 juil. 2008, 14:55

Bonjour,

Je rencontre un problème de réécriture d'URL sur mon poste de dév
alors qu'en ligne, tout fonctionne très bien.
Ben oui, moi, je déploie en ligne sans avoir validé les tests en local. Même pas peur ! :langue:

:!: Quelques éléments :
Serveur : Wampserver 2.0 (Apache 2.2.8, PHP 5.2.6)
rewrite-module : activé
AddDefaultCharset UTF-8
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^accueil.htm$ accueil.php [L]
RewriteRule ^collections.htm$ collections.php [L]
RewriteRule ^informations.htm$ informations.php [L]

RewriteRule ^(.*)\.htm\|a([0-9]+)$ /auteur.php?code=$2 [L]
RewriteRule ^(.*)\.htm\|l([0-9]+)$ /livre.php?code=$2 [L]
[Sat Jul 19 14:31:20 2008] [error] [client 127.0.0.1]
(20024)The given path misformatted or contained invalid characters:
Cannot map GET /projet3/blablabla-de-test.htm|a14 HTTP/1.1 to file
DocumentRoot "g:/wamp/www/"
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>

<Directory "g:/wamp/www/">
Options Indexes FollowSymLinks
AllowOverride all
# onlineoffline tag - don't remove
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Directory>
:?: Ze quouechtionne iz :
Sachant que toutes les règles de réécriture de mon .htaccess fonctionnent en PROD,
pourquoi en LOCAL, seules les règles en vert fonctionnent et pas celles en rouge ? :shock:

Merci !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 juil. 2008, 15:40

Quelle version d'Apache en prod ?

Je suis étonné que le caractère | fonctionne correctement dans un.htaccess :-k
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

19 juil. 2008, 15:45

Quelle version d'Apache en prod ?
2.2.3 (Unix)
Je suis étonné que le caractère | fonctionne correctement dans un .htaccess :-k
Et pourtant !
Utilisation licite confirmée sur WebRankInfo.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 juil. 2008, 15:53

Je serais toi, je tenterais de modifier tes règles avec le | en dev pour me mettre dans les dents que ce n'est pas ça ... :lol:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

19 juil. 2008, 16:00

Il y avait une erreur qui m'avait échappé :
elle ne bugue pas en ligne, mais en local.
RewriteRule ^(.*)\.htm\|a([0-9]+)$ auteur.php?code=$2 [L]
RewriteRule ^(.*)\.htm\|l([0-9]+)$ livre.php?code=$2 [L]
Le / initial redirigeait vers des fichiers placés sur la racine.
C'est OK sur mon hébergement mutualisé,
mais en local, ça remonte un dossier trop haut. Forcément.

Mais ça n'a pas suffi à résoudre le pépin. :cry:

Toujours une erreur 403...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

19 juil. 2008, 16:08

Sur la suggestion d'un zoziau qui a posé ses petites papattes sur ma boîte aux lettres, ;)
j'ai simplifié l'écriture du format à réécrire :
// anciennes écritures
RewriteRule ^(.*)\.htm\|a([0-9]+)$ auteur.php?code=$2 [L]
RewriteRule ^(.*)\.htm\|l([0-9]+)$ livre.php?code=$2 [L]

// nouvelles écritures (en retirant le | du modèle)
RewriteRule ^(.*)a([0-9]+)$ auteur.php?code=$2 [L]
RewriteRule ^(.*)l([0-9]+)$ livre.php?code=$2 [L]
C'est astucieux, mais j'ai toujours mon erreur 403. :?

Mammouth du PHP | 19672 Messages

20 juil. 2008, 15:14

Je ne vois pas de règle "RewriteBase" dans ton code : autant en ligne ça peut fonctionner, autant le fait que tu aies plusieurs projets sur ton serveur WAMP pourrait donner lieu à une erreur ... mais je me goure peut-être à cause des alias paramétrés dans ton httpd.conf :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

20 juil. 2008, 15:45

C'est vrai mais je ne pense pas que cela vienne de là.
J'avais en effet testé en ajoutant le RewriteBase dans le .htaccess.

Par acquis de consience, je viens de le retester en incluant la ligne :
RewriteBase /projet3/
Mais... toujours cette "môditse" erreur 403 ! ;)

ViPHP
ViPHP | 5924 Messages

20 juil. 2008, 20:14

L'url n'est pas déjà passée par un premier rewriting lorsque tes fichiers sont atteints ?

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

27 juil. 2008, 22:36

Décidément, quand on a la poisse, on a la poisse... |*()

J'ai voulu poster ma demande d'aide sur le forum du site wampserver.com
et là, impossible de m'y inscrire : je ne reçois pas le mail d'activation. #-o :evil:

Je commence à désespérer... :cry:

-----

Petit récap :
Serveur : Wampserver 2.0 (Apache 2.2.8, PHP 5.2.6)
rewrite-module : activé
AddDefaultCharset UTF-8
Options +FollowSymlinks
RewriteEngine on
RewriteBase /projet3/
RewriteRule ^accueil.htm$ accueil.php [L]
RewriteRule ^collections.htm$ collections.php [L]
RewriteRule ^informations.htm$ informations.php [L]

RewriteRule ^(.*)a([0-9]+)$ auteur.php?code=$2 [L]
RewriteRule ^(.*)l([0-9]+)$ livre.php?code=$2 [L]
[Sat Jul 19 14:31:20 2008] [error] [client 127.0.0.1]
(20024)The given path misformatted or contained invalid characters:
Cannot map GET /projet3/blablabla-de-test.htm|a14 HTTP/1.1 to file
DocumentRoot "g:/wamp/www/"
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>

<Directory "g:/wamp/www/">
Options Indexes FollowSymLinks
AllowOverride all
# onlineoffline tag - don't remove
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Directory>
L'utilisation du | dans une URL étant parfaitement licite (recommandé sur WebRankInfo)
(et pis d'abord, ça fonctionne en prod), comment faire pour que WampServer l'accepte aussi ?

Mammouth du PHP | 2937 Messages

28 juil. 2008, 06:52

Sachant que | fait partie des caractères spéciaux, essaie de l'enfermer entre crochets, comme suit :

Code : Tout sélectionner

RewriteRule ^(.*)a([0-9]+)$ auteur.php?code=$2 [L] RewriteRule ^(.*)[|]([0-9]+)$ livre.php?code=$2 [L]

Mammouth du PHP | 19672 Messages

28 juil. 2008, 08:49

Je l'avais essayé aussi, mais ça n'a pas fonctionné chez moi non plus.

La question à poser serait : comment est configuré le serveur Apache en prod, question à laquelle bien entendu personne ne pourra répondre ici, il faudra demander à l'admin réseau qui l'a paramétré.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 5924 Messages

28 juil. 2008, 08:56

Essaye de l'échapper : \|

Mammouth du PHP | 19672 Messages

28 juil. 2008, 08:59

marche pas non plus, et curieusement dans les logs d'Apache, le "\" était doublé, du coup le | n'était plus échappé et le message d'erreur indiqué dans le log indiquait une erreur dans le regexp. C'est un foutu casse-tête ce truc-là. Si je devais recommander quelque chose, ce serait de virer le pipe pour utiliser un autre signe, même si l'utilisation du pipe est valide, c'est trop de temps perdu pour une utilisation normale.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 5924 Messages

28 juil. 2008, 09:41

Voire même reporter le bug, puisque cela m'a bien l'air d'en être un...