URL Rewriting pour traitement XSL

Nouveau WRInaute
J'essaye de mette en place sur mon serveur un traitement XSL généralisé à partir d'une requête sur un fichier HTML. Après avoir passé une nuit à essayer de faire marcher les différents modules Apache (murka, mod_xslt) je me suis rabattu sur l'idée de faire cela avec l'URL Rewriting...et j'y est passé une autre nuit sans succès :cry: ...

Ce que je veux mettre en place est assez simple en théorie : si une requête concerne un fichier HTML de la forme "<nom fichier>-<nombre>.html" et si ce fichier n'existe pas appeler un script php qui applique la transformation du fichier "<nom fichier>.xml" avec comme paramètre de page <nombre> par le fichier XSL "<nom de la dtd>_html.xslt".

Alors j'ai pensé à ça :
Code:
RewriteCond %{REQUEST_FILENAME} -U
RewriteRule ^.+-[0-9]+\.html$ /xslt.php [L,NS]

Mais la condition ne marche pas...j'ai testé dans tous les sens REQUEST_URI, REQUEST_FILENAME et SCRIPT_FILENAME avec -F et -U mais rien n'a faire. Le code que je viens de donner est celui qui marche le mieux.

Je vous donne le log pour le code ci-dessus avec un fichier qui n'existe pas :
Code:
[rid#2798568/initial] (2) init rewrite engine with requested uri /GIME-0.html
[rid#2798568/initial] (3) applying pattern '^.+-[0-9]+\.html$' to uri '/GIME-0.html'
[rid#279a580/subreq] (2) init rewrite engine with requested uri /GIME-0.html
[rid#279a580/subreq] (1) pass through /GIME-0.html
[rid#2798568/initial] (4) RewriteCond: input='/GIME-0.html' pattern='-U' => matched
[rid#2798568/initial] (2) rewrite /GIME-0.html -> /xslt.php
[rid#2798568/initial] (2) local path result: /xslt.php
[rid#2798568/initial] (2) prefixed with document_root to d:/web/xslt.php
[rid#2798568/initial] (1) go-ahead with d:/web/xslt.php [OK]

Pourquoi me dit-il qu'il trouve l'URI pour ce fichier inexistant : parce qu'il existe une règle de réécriture pour ce fichier ? Cela n'a pas vraiment de sens...

Aidez moi s'il vous plait, car je commence à devenir insomniaque :? . J'aurai d'autres questions par la suite mais chaque chose en son temps...

En tout cas très bon forum...
 
Nouveau WRInaute
Bon, je continue mon monologue...

J'ai réussi à m'en sortir avec une bidouille :
Code:
RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} !-F

Maintenant j'aimerais que si le fichier xml n'est pas trouvé, le script php se dirige vers la page d'erreur (et pas seulement une entête 404). Pour cela, je me suis dit que le plus simple était de repasser la requête de base à Apache et qu'il fasse le tri à partir d'une variable d'environnement entre ce qui a été traité ou non, d'où :
Code:
RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} !-F
RewriteCond %{env:XSLT} !=true
RewriteRule ^.+-[0-9]+\.html$ /xslt.php [NS,E=XSLT:true,L]

Mais ça ne marche pas, car, je ne sais pas pourquoi, Apache enlève la définition de la variable XSLT à la requête suivante. C'est à dire que lorsque le script php appelle une page, la condition sur XLST ne marche pas car cette variable n'est plus définie... le E=XSLT ne servirait donc que pour l'appel des pages spécifiques à la règles... j'espère que non...

Quelqu'un à des idées ?
 
WRInaute passionné
Salut Lez, et bienvenue sur WebRankInfo !

Et tes paramètres de fichier/page... il sont où dans ta réécriture ?
Sans eux tu pourrais bien continuer ton monologue pendant longtemps :lol:
Ce que tu fais, c'est appeler xslt.php sans paramètre quel que soit le fichier demandé. :?

Essaye avec (change les noms des paramètres pour adapter à ton script):
Code:
RewriteCond %{DOCUMENT_ROOT}%{SCRIPT_FILENAME} !-F
RewriteRule  (.+)-([0-9]+)\.html$ /xslt.php?fichier=$1&page=$2  [L]
Cela réécrira test-12.html en /xslt.php?fichier=test&page=12
C'est bien ce que tu veux faire ?

Dan
 
Nouveau WRInaute
Je n'ai pas besoin de paramètres, le script php les extraits tout seul à partir de REQUEST_URI, mais c'est vrai que c'est une solution qui allègerait mon script et qui me permetttrait de l'utiliser dans un autre contexte.

Mon problème concerne la portée d'une variable d'environnement définie par le flag E. On dirait qu'elle ne concerne que les requêtes dépendant du renommage. Comment faire en sorte que lorsque mon script redonne la main à Apache, cette variable existe encore ?
 
Discussions similaires
Haut