IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Rewriting avec slug sans ID


Sujet :

Apache

  1. #1
    Membre actif
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 290
    Points : 209
    Points
    209
    Par défaut Rewriting avec slug sans ID
    Bonsoir,

    J’essaie de faire en sorte de réécrire mes URL sans utiliser d'id mais uniquement avec des slugs stockés dans la BDD

    monslug.php au lieu monslug_15.php par exemple

    J'écris donc dans mon htaccess
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(.*)\.php$ page\.php?slug=$1 [L]
    Mais si je fais un echo sur la variable envoyée (slug) le serveur me retourne "page"... au lieu de "monslug".
    Si je rajoute a mon htaccess un prefixe ou n'importe quoi au niveau de ma recherche, ca fonctionne, mais c'est pas ce que je veux faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^doc_(.*)\.php$ page\.php?slug=$1 [L]
    D'ou sort ce "page" et comment résoudre mon problème ?
    Merci pour votre aide :s

  2. #2
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 317
    Points : 135
    Points
    135
    Par défaut
    Je crois que c'est juste à cause de ta règle de redirection:

    la deuxième partie d'une rewrite rules n'est pas une regex, donc ça doit tout faire planter.
    A priori, c'est juste le "\" qui pose problème, je dirais.

    Avec ça, ça devrait être mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(.*)\.php$ page.php?slug=$1 [L]

  3. #3
    Membre actif
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 290
    Points : 209
    Points
    209
    Par défaut
    Salut xxkirastarothxx et merci pour ta réponse.

    J'ai malheureusement toujours le même problème. Je précise que j'ai bien vidé le cache avant ^^

  4. #4
    Membre actif
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 290
    Points : 209
    Points
    209
    Par défaut
    Un petit up avec le contenu de mon htaccess.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #Desactive le changement automatique des numéros des dossiers ou autre
    CheckSpelling off
     
    RewriteEngine On
    # Le serveur doit suivre les liens symboliques :
    Options +FollowSymlinks -MultiViews
    RewriteBase /
     
    #######################
     
    #ON REECRIT LES URL DES NEWS
    #RewriteRule ^actualite/(.*)_([0-9]+)\.html$ actualite\.php?article=$1&id=$2&internal_redirect=1 [L]
    #LA MEME MAIS SI ON RECOI LA LANGUE
    RewriteRule ^actualite/(.*)_([0-9]+)_(.*)\.html$ actualite\.php?article=$1&id=$2&lang=$3&internal_redirect=1 [L]
     
    #######################
     
    #ON REECRIT LES URL DES PAGES
    RewriteRule ^(.*)\.php$ page.php?slug=$1&internal_redirect=1 [L]
     
     
    #ON REECRIT LES URL le catalogue
    #RewriteRule ^catalogue/(.*)\.php$ page.php?cat=$1&internal_redirect=1 [L]
     
    #####################################################################"
     
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (.*) 404.php 
    ErrorDocument 404 404.php

  5. #5
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 317
    Points : 135
    Points
    135
    Par défaut
    Problème réglé en ajoutant le flag QSA END:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(.*)\.php$ page.php?slug=$1&internal_redirect=1 [END]
    Je t'avoue que j'ai un gros doute sur le "pourquoi" ^^
    Apparemment, une fois l'url réécrite, elle repasse de nouveau dans sa propre règle:


    * page appelée: site.com/test.php
    * url réécrite n°1: site.com/page.php?slug=test
    * url réécrite n°2: site.com/page.php?slug=page

    Et ce malgré le flag [L]... je ne comprends pas trop.
    En tout cas, le flag [END] lui, interdit "tout processus de réécriture ultérieur dans un contexte de répertoire"
    Je ne suis pas vraiment sûr de ce que ça veux dire... pour moi le flag [L] devait suffire :/

    sinon, une autre solution serait simplement de virer ".php" de tes url:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-zA-Z0-9-]+)/?$ page.php?slug=$1&internal_redirect=1 [L]
    comment ça, "page.php" ne matchera pas cette règle et ne sera pas réécrite une seconde fois.

    ce qui te donnerai des url du genre:

    site.com/monslug
    Et qui redirigerait en interne vers:
    site.com/page.php?slug=monslug

    Dernier truc: comme je te disais, fait attention avec les \ dans tes redirections:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^actualite/(.*)_([0-9]+)_(.*)\.html$ actualite\.php?article=$1&id=$2&lang=$3&internal_redirect=1 [L]

    Résolu ? = )

    PS: si quelqu'un a une meilleurs explication pour le coup du flag [L] qui ne stop pas vraiment la réécriture, je suis preneur

  6. #6
    Membre actif
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 290
    Points : 209
    Points
    209
    Par défaut
    Merci xxkirastarothxx pour ton aide précieuse

    Alors avec le flag END j'ai une grosse erreur 500.
    L'autre méthode sans extension marche parfaitement.

    C'est quand même étrange car ce n'est pas la première fois que j'écris mes règles avec l’extension. Et je n'ai jamais eu de problème jusqu’à maintenant oO

    Je vais donc faire sans extension ^^

    Merci encore !

    Je laisse le sujet encore un peu ouvert si quelqu'un à un commentaire à faire sur ce comportement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Apache] Différence URL avec ou sans ":80"
    Par sylk974 dans le forum Apache
    Réponses: 2
    Dernier message: 11/12/2005, 15h14
  2. [CSS][HTML] Mise en page : Avec ou sans tableaux ?
    Par arno2000 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 09/08/2005, 02h34
  3. Réponses: 7
    Dernier message: 23/07/2005, 12h50
  4. Saut avec ou sans condition
    Par Frenchghost dans le forum Assembleur
    Réponses: 16
    Dernier message: 03/01/2005, 13h28
  5. [C#] [EXCEL] Travailler avec EXCEL sans ouvrir le logiciel
    Par Fabsou dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/07/2004, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo