Rewrite URL : escamotage d'une partie de la chaine

Nouveau WRInaute
Bonjour à vous
j'ai survolé le forum, et pas compris grand chose. je vous suppose donc suffisamment compétents pour répondre à cette question :)

je viens d'activer les réécritures d'URL, et la simplification des adresses sur un blog dotclear 1.2.7
en plus, je suis passé du mode QUERY STRING au mode PATH INFO

tout marche bien sur place , mais du coup, forcément, les liens externes pointant vers mon site ne marchent plus :)

ils sont passés de la 1ere forme à la seconde
Code:
http://www.breizh-ardente.fr/dotclear/index.php?2006/07/19/34-installer-ubuntu
http://www.breizh-ardente.fr/dotclear/34-installer-ubuntu
j'ai viré la partie index.php?date pour ne garder que n°-titre
le n° est propre a chaque article

j'ai saisi le principe de remplacement, mais pas comment escamoter toute la première partie :/

mon fichier htaccess contient pour l'instant
Code:
Redirect temp /index.html http://www.breizh-ardente.fr/dotclear/index.php
ErrorDocument  404  /dotclear/erreur404
AddType application/x-httpd-php5 .php
RedirectPermanent /dotclear/punbb http://forum.breizh-ardente.fr

# RSS Dotclear 1
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule dotclear/rss.php$ http://feeds.feedburner.com/Breizh-ardente [L,R=301]

# URL simplifiee
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /dotclear/index.php

merci de votre aide
 
Nouveau WRInaute
j'essaie de mon côté, hein !
mais j'y connais rien :oops:

je pensais a u truc genre
RewriteRule
^/dotclear/index.php?([0-9]{4})/([0-9]{2})/([0-9]{2})/([0-9]{2,3})-([a-z0-9\-]+)$ /dotclear/$4-$5
mais ca ne marche pas du tout :?

c'est une grosse connerie ? :roll:
 
WRInaute impliqué
Pour attraper ce qui est après ? il faut utiliser QUERY_STRING. Essaie ça (pas testé):

Code:
RewriteCond %{QUERY_STRING} ^([0-9]{4})/([0-9]{2})/([0-9]{2})/([0-9]{2,3})-([a-z0-9-]+)^$
RewriteRule dotclear/index.php /dotclear/%4-%5
 
Nouveau WRInaute
tain, pas mal

je m'en approchais avec
Code:
RewriteCond %{QUERY_STRING} ^([0-9]{4}/[0-9]{2}/[0-9]{2})/([0-9]{2,3}-[a-zA-Z0-9\-]+)$ 
RewriteRule index.php http://www.breizh-ardente.fr/dotclear/$2

mais aucune des 2 solutions ne marche :cry:

est ce que cette section ne parasite pas le truc ?
Code:
# URL simplifiee
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /dotclear/index.php
 
WRInaute impliqué
Si, il faut mettre la nouvelle règle avant.

Les règles sont appliquées dans l'ordre ou elles sont trouvées.

Sinon, j'ai fait une faute de frappe (un ^ intempestiof a la fin de la condittion):

Code:
RewriteCond %{QUERY_STRING} ^([0-9]{4})/([0-9]{2})/([0-9]{2})/([0-9]{2,3})-([a-z0-9-]+)$
RewriteRule dotclear/index.php /dotclear/%4-%5

Ta version ne marche pas car il faut utiliser %2 au lieu de $2 pour référencer les motifs de la condition.
 
Nouveau WRInaute
du changement ...

erreur 500 :evil:

je suis exactement tes recommandations
Code:
# anciennes URL 
RewriteCond %{QUERY_STRING} ^([0-9]{4})/([0-9]{2})/([0-9]{2})/([0-9]{2,3})-([a-zA-Z0-9-]+)$
RewriteRule dotclear/index.php /dotclear/%4-%5 

# URL simplifiee
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /dotclear/index.php
 
Nouveau WRInaute
un exemple un peu plus complexe d’une redirection fonction de la “query string” (variable après le point d’interrogation). Elle redirige:

* /index.php?couleur=bleu vers http://www.domaine.com/bleu.html
* /index.php?couleur=rouge vers http://www.domaine.com/rouge.html
* /index.php?couleur=jaune vers http://www.domaine.com/jaune.html
* …

RewriteEngine on
RewriteCond %{QUERY_STRING} ^couleur=(.*)$
RewriteRule ^index\.php$ http://www.domaine.com/%1.html? [L,R=301]
j'ai lu a plusieurs reprise de conclure la boucle query string en rajoutant un ? a la fin de la regle

je tente avec
Code:
RewriteRule ^/dotclear/index.php /dotclear/%4-%5?
ca corrige l'erreur 500, mais pas la réécriture
 
Nouveau WRInaute
pff
pour en savoir plus, j'ai reproduit l'installation en local (ubuntu 7.10 & apache2) en respectant les étapes successives
(install en query string, changement du mode en path info, activation des URL simplifiée, puis essayer de reconnaitre les anciennes url)

j'ai remis le même htaccess à la racine, ca fonctionne, y compris la réécriture pour shunter index.php de l'URL

j'essaie maintenant de faire fonctionner cette satanée règle pour les anciennes URL
Code:
# anciennes URL
RewriteCond %{QUERY_STRING} ^([0-9]{4})/([0-9]{2})/([0-9]{2})/([0-9]{2,3})-([a-zA-Z0-9-]+)$
RewriteRule ^dotclear/index.php /dotclear/%4-%5?
qui, a priori, est correcte

en activant les log de réécriture
(j'apprends plein de choses :p )
ca ne fonctionne pas non plus en local
voila le log de l'appel de
h**p://localhost/dotclear/34-installer-ubuntu
qui conduit bien à la page demandée :wink:
http://pastebin.com/m19492ade

je les met en lien

et celui de l'appel de
h**p://localhost/dotclear/index.php?2006/07/19/34-installer-ubuntu
qui ramène à la page d'accueil :roll:
http://pastebin.com/d29f4d4da
 
Nouveau WRInaute
Encore moi
:D

ca y est !

ca marche
simplement en rajoutant les options [L,R] à la fin de la règle


Code:
# anciennes URL
RewriteCond %{QUERY_STRING} ^([0-9]{4})/([0-9]{2})/([0-9]{2})/([0-9]{2,3})-([a-zA-Z0-9-]+)$
RewriteRule ^dotclear/index.php /dotclear/%4-%5? [L,R]

I AM HAPPY
on ferme :)
 
Discussions similaires
Haut