nico.riv Posté 11 Août 2009 Posté 11 Août 2009 (modifié) Bonjour, Je tourne en rond depuis 3 jours, c'est pourquoi je fini par laisser un message... Voilà le problème : lorsque l'utilisateur saisie cette url : http://monsite.com/admax_v2/accueil/index.php j'ai mis une règle qui doit transformer en : http://monsite.com/admax_v2/index.php?dossier=accueil Voici mon fichier .htaccess : Options +FollowSymlinksRewriteEngine onRewriteRule ^([a-z]+)(.*)$ ../index.php?dossier=$1 [L] Ca me redirige bien vers ma page index à la racine du site, mais ma variable $_GET['dossier'] me retourne 'index' ... et la règle suivante ne fonctionne pas : RewriteRule ^([a-z]+)/([a-z]+)(.*)$ ../index.php?dossier=$1 [L] :help: Modifié 11 Août 2009 par nico.riv
skrill Posté 11 Août 2009 Posté 11 Août 2009 (modifié) Bonjour, Pour moi tu pointes sur le texte et pas sur le numéro de ton id remplace le $1 par $2 et ta variable devrait passer correctement. Et rajoute QSA si c'est une requête en générale ça va dessuite mieux. RewriteRule ^([a-z]+)(.*)$ /index.php?dossier=$2 [L,QSA] Courage ! Modifié 11 Août 2009 par skrill
nico.riv Posté 12 Août 2009 Auteur Posté 12 Août 2009 Désolé, je viens d'eaasayer et je m'arrache les cheveux Ta solution fonctionne mais ne me retourne pas ce que je veux dans ma variable, ça me retourne dossier=ndex.php et je veux que ça me retourne dossier=accueil En fait voici l'url à réécrire : http://monsite.com/admax_v2/accueil/ ET voici l'url réécrite que je veux obtenir : http://monsite.com/admax_v2/index.php?dossier=accueil C'est pourtant simple, mais dès que je rajoute un slash dans la règle de réécriture, ça me plante tout... ça marche avec tiret, mais comme je suis tétu, je veux pouvoir mettre un slash. Merci pour votre aide.
skrill Posté 12 Août 2009 Posté 12 Août 2009 Si je comprend bien cette rewriterule ne doit fonctionner que pour ce cas ? ou pour toute tes rubriques ? Essaye ça : RewriteRule ^index.php?dossier=accueil$ accueil/index.php [L,QSA] Si tu as une erreur 500 échappe le "?" en faisant \? RewriteRule ^index.php\?dossier=accueil$ accueil/index.php [L,QSA]
nico.riv Posté 12 Août 2009 Auteur Posté 12 Août 2009 En fait c'est l'inverse, et c'est une règle générale : RewriteRule ^([a-z]+)/([a-z]+)\.php$ ../index.php?dossier=$1 [L,QSA] url saisie dans le navigateur : http://monsite.com/admax_v2/accueil/ url que je veux obtenir : http://monsite.com/admax_v2/index.php?dossier=accueil Où accueil est une variable qui change selon la navigation... et dans ma règle d'écriture c'est le slash qui semble me poser problème, mais même en l'échappant ça ne fonctionne pas... Merci d'avance
skrill Posté 12 Août 2009 Posté 12 Août 2009 (modifié) A droite tu affiche l'url existante sans le http, à tester avec ou sans tes répertoires adamax_v2 et accueil ca donnerai /admax_v2/accueil/index.php?dossier=$x ( à ce stade on ne connait pas l'indice de la variable) Je ne sais pas comment sont construite tes url en dur dans ton code dans la balise <a href="xxxx"> Je ne comprend pas pourquoi tu tiens absolument à écrire index.php qui ne te servira à rien dans l'optimisation des url Le début c'est ce qui va être affiché dans ton url en remplacement de l'ancienne les échappements testes avec et sans RewriteRule ^index\.php\?dossier=([a-z]+)$ Donc au final ca fait RewriteRule ^index\.php\?dossier=([a-z]+)$ /admax_v2/accueil/index.php?dossier=$1 ($1 par ce qu'il n'y a qu'une seule variable à récupérer : ([a-z]+) ) tout ce qui n'est pas une variable tu l'écrits en dur et aussi dans la construction de tes liens dans ta source ou alors essayer de passer avec ce type d'écriture à voir les possibilités RewriteCond %{QUERY_STRING} ^dossier=([a-z]+)$ RewriteRule ^index\.php$ http://tondomaine.fr/admax_v2/accueil/index.php?dossier=%1? [L,QSA] bon courage Modifié 12 Août 2009 par skrill
nico.riv Posté 12 Août 2009 Auteur Posté 12 Août 2009 Merci pour tes réponses, mais mon problème est que j'ai un fichier index dans lequel il y a un include($_GET['dossier'].'/'.$_GET['page'].'.php') Donc pour appeler une page je fait admax_v2/index.php?dossier=xxxxxx&page=zzzzzzz et mon dossier xxxxxx existe physiquement sur le serveur. Le truc c'est que je voudrais une url plus propre, du style adamx_v2/xxxxxx/yyyyyy.php Donc ta solution fonctionne bien, mais ne résoud pas mon problème... Mais comme je suis parti, je crois que vais tout simplement mettre aux oubliette les url rewriting tellement c'est la galère pour faire quelque chose de tout simple.
skrill Posté 12 Août 2009 Posté 12 Août 2009 Tu sais a faire du rewriting on en a tous bavé a un moment, il faut savoir être tenace. Si tu me dis que ça fonctionne ca doit être la première règle RewriteRule ^index\.php\?dossier=([a-z]+)$ /admax_v2/accueil/index.php?dossier=$1 RewriteRule ^adamax_v2/dossier=([a-z]+)/([a-z]+)\.php$ admax_v2/index.php?dossier=$1&page=$2 si $2 est du texte sinon il faut écrire ([0-9]*) par exemple par des chiffres Je pense que tu n'es pas très loin de la solution, si le "/" te fait une erreur 500 essaye l'échappement "\/"
nico.riv Posté 12 Août 2009 Auteur Posté 12 Août 2009 Merci de tes encouragements ! Je tenace d'habitude mais là je crois qu'il est temps de prendre des vacances ! En fait mon problème viens du fait que le dossier existe physiquement. Je reprend tout : J'ai un dossier index.php à la racine du site, qui fait un include en fonction de 2 paramètres index.php?dossier=xxx&page=yyy, que je veut transformer pour que ce soit plus propre en /xxx/yyy.php Le problème est que le dossier xxx existe physiquement, ce qui pose problème dans la réécriture. Donc j'ai rajouté un _ devant le nom de chacun de mes dossiers physique et ajouté une règle ErrorDocument 404 /admax_v2/index.php à la racine du site. Donc maintenant tout redirige sur index.php, et toutes mes règles de réécriture marchent. Je rajoute dans mon index.php un _ devant la variable $_GET['dossier'] et je suis le plus heureux dans le meilleur des mondes ! Pour conclure, l'url rerwrinting ne marche que sur des dossiers virtuel (pour pouvoir utiliser le slash), et si le dossier existe physiquement, le navigateur cherche a rentrer dans le dossier. J'ai l'impression d'être très confu dans mes explications...
skrill Posté 12 Août 2009 Posté 12 Août 2009 Oui en effet des fois j'ai du mal a te suivre. Et pourquoi ne pas faire des dossiers virtuel et mettre tout tes fichiers dans le même dossier ? Avec le nom des rubriques en dur ou en BDD ensuite tu customises ton rewriting et tu réécris tout tes liens T'es sur de vouloir dire que ton index.php est une erreur 404 ? ErrorDocument 404 /admax_v2/index.php j'aurais plus tendance à faire une page 404.html et faire une redirection vers l'index.
nico.riv Posté 13 Août 2009 Auteur Posté 13 Août 2009 En fait je suis en train de faire des test pour construite mon propre 'framework', et comme j'hésite beaucoup sur l'organisation des fichiers, je me mélange un peu les pinceaux... En tous cas merci beaucoup pour ton aide skrill, et d'une manière générale à toute l'équipe du forum
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant