Aller au contenu

Problème de url rewriting


Sujets conseillés

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 +FollowSymlinks
RewriteEngine on
RewriteRule ^([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é par nico.riv
Lien vers le commentaire
Partager sur d’autres sites

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é par skrill
Lien vers le commentaire
Partager sur d’autres sites

Désolé, je viens d'eaasayer et je m'arrache les cheveux :mad2:

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.

Lien vers le commentaire
Partager sur d’autres sites

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]

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é par skrill
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Tu sais a faire du rewriting on en a tous bavé a un moment, il faut savoir être tenace. :cool:

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 "\/"

Lien vers le commentaire
Partager sur d’autres sites

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 ! :smartass:

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...

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 :thumbsup:

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...