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 :

URL Rewriting rien ne marche


Sujet :

Apache

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 18
    Points
    18
    Par défaut URL Rewriting rien ne marche
    Bonjour
    Je suis en localhost sur mon ordi, le mod_rewrite est bien activé et fonctionne.

    Ce que je veux faire :
    Re-écrire /mon-site/user1/la_suite_voire_rien
    En /mon-site/index.php/la_suite_voire_rien

    Ne me dites pas qu'il suffit de changer l'adresse de base du site parceque bien sur j'ai user2, user3, ....

    La seule chose que j'arrive à faire fonctionner c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^ /mon-site/testrw.php
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(.*)$ /mon-site/testrw.php
    Si j'ai bien compris les arcanes des expressions régulières perl théoriquement il faudrait que j'écrive :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^/mon-site/user1/(*)$ /mon-site/index.php/$1
    Cela me fait un magnifique Internal Server Error. Bon j'ai compris qu'il ne supporte pas (*) mais ça c'est pas grave je peux remplacer par des classes pour capturer la suite

    Mais même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^/mon-site/user1/ /mon-site/testrw.php
    ne fonctionne pas (la régle ne s'active pas): j'ai essayer de supprimer mon-site, d'échapper le tiret, de mettre localhost devant avec ou sans slash rien n'y fait.

    aidez-moi svp

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Plusieurs choses sont possibles. Il peut y avoir un "conflit" avec d'autres règles de réécriture, ou bien la négociation de contenu est activée. Je te propose donc la chose suivante :
    1. Tu désactives la négociation de contenu
    2. Tu testes
    3. Si ça ne marche toujours pas avec la dernière règle que tu donnes et qui semble être la bonne, tu nous donnes tout ton .htaccess

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Merci Mac; mais ça fait rien du tout
    Voici le htaccess
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Options +FollowSymlinks
    Options -MultiViews
    RewriteEngine on
    #RewriteRule ^/(e-FormLearn2)/(.*)$ /e-FormLearn2/testrw.php
    #RewriteRule ^/e-FormLearn2/TCL/test.php /e-FormLearn2/testrw.php
    #RewriteBase /e-FormLearn2/
    #RewriteRule ^([a-z][A-Z][0-9][/]) index.php/$1
    #RewriteRule ^/e-FormLearn2/TCL(.*) /$1
    RewriteRule ^/e-FormLearn2/TCL/ /e-FormLearn2/testrw.php

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Bon je suis rentré à la maison et j'ai reproduis la structure sur mon ordi perso. Exactement le même problème.

    Le point commun: j'utilise wamp. Ce serait pas lui qui me fait des siennes?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Oublis pas [L] à la fin des règles quand tu veux que ton .htaccess arrête à la première règle qui concorde.

    Essaye:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^/e-FormLearn2/TCL/$ e-FormLearn2/testrw.php [L]

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Merci bobyback mais le [L] est indispensable si on a d'autres règles après. Mais j'ai essayé au cas où et ça change rien: la règle ne s'active pas j'ai Index of e-FormLearn2/TCL/

    La seule chose qui fonctionne c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^ e-FormLearn2/testrw.php
    Mais si j'essaye de fonctionner comme ça avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^ e-FormLearn2/index.php
    Je reçois en fait e-FormLearn2/index.php/TCL

    Ce qui fait pas du tout mes affaires: il faut faire sauter le TCL

  7. #7
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu peux redonner le .htaccess complet avec l'URL de test ? Précise aussi une chose : tu veux que l'URL change dans la barre d'adresse quand tu demandes /e-FormLearn2/TCL ou pas ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Voilà ou j'en suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Options +FollowSymlinks
    Options -MultiViews
    RewriteEngine on
    #RewriteRule ^/(e-FormLearn2)/(.*)$ /e-FormLearn2/testrw.php
    #RewriteRule ^/e-FormLearn2/TCL/test.php /e-FormLearn2/testrw.php
    #RewriteBase /e-FormLearn2/
    #RewriteRule ^([a-z][A-Z][0-9][/]) index.php/$1
    #RewriteRule ^/e-FormLearn2/TCL(.*) /$1
    RewriteRule ^ /e-FormLearn2/index.php [L]
    Mais bon je ne peux pas vous donner d'url de test; je suis en local.
    J'y accéde avec htpp://localhost/e-FormLearn2/TCL/
    Mais j'ai essayé de mettre localhost devant cela ne fonctionne pas plus.

    Quand à l'url dans la barre du navigateur il serait souhaitable qu'elle ne soit pas re-écrite (ce qui est le cas avec cette version). Mais si ça fait fonctionner le bouzin de la re-écrire tant pis.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Hummm

    Je suis en train de me demander si je ne m'y prend pas mal.

    Oui car je créé un répertoire TCL (et autres) à la racine du site qui finalement ne contient chaque fois qu'un .htaccess pour renvoyer sur index.php et ne sert à rien d'autre.

    Je suis parti comme ça parce que je comptais y mettre un index.php et faire ma redirection en php, et en profiter pour enregistrer un éventuel cookie ou ouvrir un session php. Et puis je me suis dit avant de faire ça je vais creuser la voix du .htaccess et voir si je peux fonctionner sans session et sans cookie (lol le programmeur fainéant).

    Mais je suis sur que pour la redirection pure je pourrais m'en tirer avec un seul .htaccess et des régles conditionnelles au niveau du répertoire de base.

    C'est une autre voix que je n'ai pas le temps d'explorer ce soir.

    N’empêche que ça devrait marcher et que ça ne marche pas, et que j'aimerais bien avoir le fin mot de l'histoire.

  10. #10
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Bon, je ne sais pas trop pourquoi mais il faut retirer le premier / pour que ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^ e-FormLearn2/index.php [L]
    C'est une petite subtilité de mod_rewrite que j'ai encore un peu de mal à saisir.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Non ça fonctionne encore moins en enlevant le premier slash: cela me fait une internal error 500.
    Donc j'ai changé mon fusil d'épaule; mon framework php est du codeigniter http://codeigniter.com/
    et j'ai essayé d'appliquer le .htaccess qu'ils donnent dans la doc là:
    http://codeigniter.com/user_guide/general/urls.html
    en l'appliquant à mon cas ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RewriteEngine on
    RewriteCond $1 !^(robots\.txt|system/application/views|index\.php)
    RewriteRule ^(.*)$ /e-FormLearn2/index.php/accueil/login/$1 [L]
    Bon la règle conditionnelle fonctionne: mon application continue à fonctionner normalement (toutes mes url contiennent index.php, ou system/application/views pour les includes images, javascript ou css), et la règle s'applique si j'essaie une url sans index.php de la forme /e-FormLearn2/TCL/, et est bien redirigé sur index.php.

    Mais codeigniter (et c'est le index.php de codeigniter qui répond) me renvoit no found. Alors que si je rentre directement dans ma barre de navigateur /e-FormLearn2/index.php/accueil/login/TCL/ ça fonctionne.

    Je comprend pas pourquoi, et je me demande ce que reçois index.php comme url; il n'y a pas des log pour vérifier ?

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    C'est bien un problème du module rewrite
    En fait malgré la règle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(.*)$ /e-FormLearn2/index.php/accueil/login/$1
    Quand je mets dans ma barre

    Je reçois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /e-FormLearn2/index.php/TCL/
    et pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /e-FormLearn2/index.php/accueil/login/TCL
    Ce qui fait pas du tout mes affaires: je ne vais pas écrire un contrôleur pour chacun j'en ai 40 à faire.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    D'ailleurs si je mets comme règle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(.*)$ /e-FormLearn2/index.php [L]
    Donc sans la variable $1 à la fin

    Je reçois quand même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /e-FormLearn2/index.php/TCL/
    Quand je mets

    dans ma barre de navigation

    Comment cela se fait-il ?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Bon en lisant la doc apache j'ai trouvé une solution qui fonctionne: faut ajouter le flag R: avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RewriteRule ^(.*)$ /e-FormLearn2/index.php/accueil/login/$1 [R,L]
    Je suis bien redirigé.

    J'aimerais bien comprendre pourquoi sans ça cela ne fonctionne pas, alors que le net regorge d'exemples sans le flag Redirect. Mais j'ai plus qu'assez passé de temps là dessus: je tiens une solution satisfaisante donc je vais en rester là.

    Merci à ceux qui ont participés.

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

Discussions similaires

  1. URL rewriting qui ne marche pas
    Par TallyHo dans le forum Apache
    Réponses: 2
    Dernier message: 06/04/2009, 13h50
  2. Réponses: 3
    Dernier message: 29/01/2009, 11h45
  3. [URL Rewriting] sous domaine marche une fois sur 2
    Par eMeRiKa dans le forum Apache
    Réponses: 11
    Dernier message: 18/02/2008, 16h09
  4. URL Rewriting, ne marche pas :(
    Par Thomus38 dans le forum Apache
    Réponses: 1
    Dernier message: 12/07/2007, 12h40
  5. Encore un URL Rewriting qui ne marche pas
    Par fabrisss dans le forum Apache
    Réponses: 3
    Dernier message: 10/07/2007, 17h12

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