Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2011, 00h16   #1
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Par défaut [URL rewriting] Réécriture des dates

Bonsoir, j'ai un fichier htaccess pour la gestion des directives de réécriture.
J'utilise une URL qui contient un paramètre de date formatée (2011/03/02)
La réécriture fonctionne mais n'est pas correct car il considère la fin de la date pour un autre paramètre dans cette même réécriture.
Je souhaite forcer la date dans l'url
Voici un exemple d'URL :
Citation:
/actualites/2011/02/03/mon-actualite-numero-2/hrPH1lUTbkMh0hSRtPsO/
/
Ma réécriture pour cette URL :
Code :
RewriteRule ^(actualites|news|nieuws)[/]([/0-9]+)[/]([-_0-9a-zA-Z]+)[/]([0-9a-zA-Z]+)/{0,1}$   /news.php?getdate=$2&uri_get_news=$3&getnews=$4				[QSA,L]
Ne dois je pas modifier ceci :

Code :
(actualites|news|nieuws)[/]([/0-9]+)
Par quelque chose comme :

Code :
(actualites|news|nieuws)[/]([/0-9]+){4}[/]([/0-9]+){2}[/]([/0-9]+){2}/
Sachant que je dois pensé aux autres paramètres
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 01h18   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
C'est inutilement complexe, de ce que je comprends :
Code :
RewriteRule ^(?:actualites|news|nieuws)/(\d{4}/\d{2}/\d{2})/([-_0-9a-zA-Z]+)/([0-9a-zA-Z]+)/?$ /news.php?getdate=$1&uri_get_news=$2&getnews=$3 [QSA,L]
?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 13h00   #3
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Bonjour Julp
J'ai une question que fait cette partie ? :
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 13h53   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
(?: ... ) : c'est une parenthèse non capturante (donc pas de mémorisation, pas de variable associée). $1 désigne dès lors la partie date et non actualites|news|nieuws dont visiblement vous n'aviez pas besoin.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 14h11   #5
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Donc si je comprend bien je n'est nul besoin de la partie petites-annonces
mais si j'ai utilisé $2 c'est parce qu'au début de mon fichier je charge la langue :
Code :
RewriteRule ^(fr|en|nl|de {1,3}/(.*) 	   /$2?getLanguage=$1 [QSA,L]
Mes annonces actuelles :
Code :
RewriteRule ^(petites-annonces|small-ads|zoekertjes|anzeigen)/([/0-9]+)-([-0-9a-zA-Z]+)/{0,1}$     		/smallads.php?getid_sect_adds=$2&sect_link_adds=$3  [QSA,L]
je suppose que sa fonctionnera mieux :
Code :
RewriteRule ^(?:petites-annonces|small-ads|zoekertjes|anzeigen)/([/0-9]+)-([-0-9a-zA-Z]+)/{0,1}$     		/smallads.php?getid_sect_adds=$2&sect_link_adds=$3 [QSA,L]
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 14h22   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
J'ai du mal à suivre.

Dans la première [celles avec les langues] (qui est syntaxiquement fausse), il faut des parenthèses capturantes puisque vous souhaitez réutiliser cette partie.

Dans la seconde, si la partie petites-annonces|small-ads|zoekertjes|anzeigen n'est pas utilisée (ce qui est visiblement le cas), une parenthèse capturante n'est pas nécessaire. Par contre, si vous en utilisez une non-capturante, il ne faut pas oublier de décrémenter vos variables ($1 : fait alors référence à ce qui est capturé par ([/0-9]+) ; $2 à ([-0-9a-zA-Z]+)).

Après, vous gérez ça comme vous voulez. Les parenthèses non-capturantes ne sont pas "obligatoires" (c'est juste plus "propre" et ça permet éventuellement de ne pas atteindre inutilement la limite des 9 captures).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 09h46   #7
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Que dois je modifier dans:
Code :
RewriteRule ^(fr|en|nl|de){1,3}/(.*) 	 /$2?getLanguage=$1  [QSA,L]
Pour la rendre syntaxiquement correct ?
Ceci est-il plus cohérent :
Code :
RewriteRule ^(?:petites-annonces|small-ads|zoekertjes|anzeigen)/([/0-9]+)-([-0-9a-zA-Z]+)/{0,1}$     		/smallads.php?getid_sect_adds=$1&sect_link_adds=$2 [QSA,L]
LA partie :
Code :
(?:petites-annonces|small-ads|zoekertjes|anzeigen)
fais alors référence à /smallads.php. et getid_sect_adds=$1 à ceci:
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 11h33   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par gtraxx Voir le message
Que dois je modifier dans:
Code :
RewriteRule ^(fr|en|nl|de){1,3}/(.*) 	 /$2?getLanguage=$1  [QSA,L]
Pour la rendre syntaxiquement correct ?
Rien, elle l'est là (avant il y avait un espace au lieu d'une parenthèse fermante). Par contre, est-elle "logique" ? (de 1 à trois "langues" ? frenfr est accepté)

Citation:
Envoyé par gtraxx Voir le message
Ceci est-il plus cohérent :
Code :
RewriteRule ^(?:petites-annonces|small-ads|zoekertjes|anzeigen)/([/0-9]+)-([-0-9a-zA-Z]+)/{0,1}$     		/smallads.php?getid_sect_adds=$1&sect_link_adds=$2 [QSA,L]
Correct, oui ({0,1} <=> ?).

Citation:
Envoyé par gtraxx Voir le message
LA partie :
Code :
(?:petites-annonces|small-ads|zoekertjes|anzeigen)
fais alors référence à /smallads.php.
Non, elles n'ont aucun lien.

Citation:
Envoyé par gtraxx Voir le message
et getid_sect_adds=$1 à ceci:
Oui, comme je l'ai écrit précédemment.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 22h35   #9
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Citation:
Rien, elle l'est là (avant il y avait un espace au lieu d'une parenthèse fermante). Par contre, est-elle "logique" ? (de 1 à trois "langues" ? frenfr est accepté)
Heu {1,3} c'est pas de 1 à 3 lettres ?
C'est vrai qu'au lieu de sa :
Code :
^(fr|en|nl|de){1,3}/(.*)
Je suppose qu'un truc comme sa est plus flexible :
Si bien sur je me suis pas planté sur la règle {1,3}, je dois absolument ne permettre que maximum 3 lettres en début d'url
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 23h23   #10
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Non, absolument pas. Vous devriez (re)prendre un tutoriel sur les expressions régulières et/ou tester.

{1,3} : 1 à 3 fois ce qui précède. Or ce qui précède, c'est la chaîne 'fr' ou 'nl' ou 'en' ou 'de' (du fait du groupement via la parenthèse). Donc en l'état, vous avez correspondance avec des chaînes comme frfr, enfren, deenfr, etc. (bien que vous ne voyez/capturez que la dernière)

Idem pour ([a-zA-Z]+){1,3} : ça ne désigne pas "une à trois lettres" non plus. ([a-zA-Z]{1,3}) oui.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 18h44   #11
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Effectivement c'est beaucoup mieux.
C'est tout même difficile de savoir que la réécriture était incorrect sauf après réflexion (vu que pas d'erreur).
C'est vrai que la je me suis bien planté avec les expressions régulières.
Je vais devoir lire le sujet en profondeur pour corriger mes expressions régulières et décortiqué avant l'ajout des règles prochaines.
Grand merci Julp
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h09.


 
 
 
 
Partenaires

Hébergement Web