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 10/08/2011, 21h19   #1
Invité de passage
 
Inscription : juillet 2011
Messages : 75
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 75
Points : 1
Points : 1
Par défaut URL rewriting qui marche trop bien

Bonjour,

Pour ma page acces.php, j'aimerais transformer mes get en "dossier" et supprimer acces.php de l'url.
Exemple:
Transformer: acces.php?cat=images&titre=faire-ce-truc-avec-des-images
En: images/faire-ce-truc-avec-des-images

Voici le code essayé:

Code :
RewriteRule ([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
Le soucis: Toutes les pages contenues dans tous les dossiers après ce htaccess prend l'interface de acces.php, donc à la place de m'afficher la page normalement, ça m'affiche le contenu de acces.php quelque soit la page.

Je ne vois pas le probleme. Merci pour votre aide
sam1212 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 11/08/2011, 15h09   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 285
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 285
Points : 8 570
Points : 8 570
C'est juste que ton filtre (premier paramètre de RewriteRule) est trop générique. Il faut juste mettre un filtre plus précis. Par exemple :
Code :
RewriteRule ^acces/([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
et tu utilises des URL comme celle-ci : http://xxx.com/acces/images/faire-ce...vec-des-images
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 19h00   #3
Invité de passage
 
Inscription : juillet 2011
Messages : 75
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 75
Points : 1
Points : 1
Merci pour ta réponse

Le probleme est que je voudrais une url de ce type: http://xxx.com/images/faire-ce-truc-avec-des-images
Est-ce possible?

J'ai essayé:

Code :
/([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
et:

Code :
^/([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
sans succès
sam1212 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 20h12   #4
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 285
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 285
Points : 8 570
Points : 8 570
On me peut pas mettre de ^/ au début dans un .htaccess ; s'il n'y en avait pas dans mon exemple, c'était volontaire. Une règle comme celle-ci dans un .htaccess ne marchera jamais :
Code :
RewriteRule ^/([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
Et une règle comme celle-ci ne matchera que les URL du type http://xxx.com/nimportequoi/abcd/tagada123 :
Code :
RewriteRule /([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
On en revient toujours à la même chose : avoir un filtre pertinent, précis, pas trop "large". Donc c'est comme tu veux :
Code :
RewriteRule ^images/([a-z0-9-]+) acces.php?cat=images&titre=$2
ou encore un truc comme l'exemple que j'ai donné, mais pas
Code :
RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=images&titre=$2
qui est beaucoup trop large, comme tu le constates.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 20h41   #5
Invité de passage
 
Inscription : juillet 2011
Messages : 75
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 75
Points : 1
Points : 1
Je vois bien le probleme mais la catégorie et le titre changent à chaque page. Donc
Code :
RewriteRule ^images/([a-z0-9-]+) acces.php?cat=images&titre=$2
n'est malheureusement pas utilisable.
Exemple: l'url peut devenir "nomdusite.com/php/faire-ca-en-php" ou "nomdusite.com/images/faire-ce-truc-avec-des-images".

J'espère que j'explique bien

Merci pour tes réponses
sam1212 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 00h13   #6
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 285
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 285
Points : 8 570
Points : 8 570
Je comprends bien mais les possibilités sont limitées.

Est-ce que cette règle marche mieux ?
Code :
1
2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=images&titre=$2
Si ça ne change rien, peux-tu nous dire dans quels cas tu veux et ne veux pas rediriger vers acces.php ? Comment sais-tu, toi, que telle URL doit aller vers acces.php et pas telle autre ?
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 00h37   #7
Invité de passage
 
Inscription : juillet 2011
Messages : 75
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 75
Points : 1
Points : 1
Cela semble bien mieux marcher, apparemment les autres pages n'ont plus l'interface de acces.php.

J'ai changé le code:

Code :
1
2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=images&titre=$2
en:

Code :
1
2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
car "images" peut changer .

Au fait je souhaite réécrire l'url pour la simplifier, rien de plus. Donc toutes les url passant par acces.php doivent se réécrire comme je l'ai indiqué ci-dessus.
Le but est qu'en donnant: nomdusite.com/php/faire-ca-en-php, le traitement se fasse par acces.php?cat=php&titre=faire-ca-en-php.

Pourquoi
Code :
RewriteCond %{REQUEST_FILENAME} !-f
améliore le code? Quel est son rôle?

Merci pour ton aide, j'étais bien bloqué
sam1212 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 11h18   #8
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 285
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 285
Points : 8 570
Points : 8 570
Citation:
Envoyé par sam1212 Voir le message
car "images" peut changer .
En effet C'est ça quand on ne maîtrise pas la puissance du copier-coller.

Citation:
Envoyé par sam1212 Voir le message
Pourquoi
Code :
RewriteCond %{REQUEST_FILENAME} !-f
améliore le code? Quel est son rôle?
Ben c'est pour dire d'exécuter la RewriteRule qui suit si ce qu'on demande ne correspond pas déjà à un fichier existant (-f).
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 13h41   #9
Invité de passage
 
Inscription : juillet 2011
Messages : 75
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 75
Points : 1
Points : 1
D'accord donc si je comprends bien, avant la règle réécrivait tout, même les pages n'ayant pas acces.php dans l'url, là avec
Code :
RewriteCond %{REQUEST_FILENAME} !-f
on vérifie si le fichier n'existe pas avant et donc on ne réécrit pas l'url?
sam1212 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 18h54   #10
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 285
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 285
Points : 8 570
Points : 8 570
C'est bien ça.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2011, 00h42   #11
Invité de passage
 
Inscription : juillet 2011
Messages : 75
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 75
Points : 1
Points : 1
Ok merci

Est-ce que je peux reprendre ce code pour rajouter une règle pour une page telechargement.php?
Faire:

Code :
1
2
3
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
RewriteRule ^telechargement/([a-z0-9]+) telechargement.php?doss=telechargement&nom=$1
Pour avoir "nomdusite.com/telechargement/truc123" à la place de "nomdusite.com/telechargement.php?doss=telechargement&nom=truc123"?

Est-ce que ça marche ou je n'ai pas bien compris.

Merci pour ton aide
sam1212 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2011, 14h37   #12
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 285
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 285
Points : 8 570
Points : 8 570
Ca marchera mais à condition de mettre la règle sur telechargement.php avant la règle sur acces.php car le filtre sur telechargement est incluse dans celle de acces, et comme Apache exécute les règles dans l'ordre du fichier, ce sera acces.php qui sera toujours activé. Je te conseille également de mettre le flag [L] pour limiter au maximum les effets de bord.

Ca donnne ceci :
Code :
1
2
3
4
RewriteRule ^telechargement/([a-z0-9]+) telechargement.php?doss=telechargement&nom=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2 [L]
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2011, 20h46   #13
Invité de passage
 
Inscription : juillet 2011
Messages : 75
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 75
Points : 1
Points : 1
Merci pour la modif et pour l'explication

Par contre je ne comprends toujours pas pourquoi toutes les pages sont touchées lors de:

Code :
RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2
Normalement ça devrait affecter que les pages acces.php non?

Pour la correction que tu m'as proposé, faut-il que je mette:

Code :
RewriteCond %{REQUEST_FILENAME} !-f
tout en haut?

Donc:

Code :
1
2
3
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^telechargement/([a-z0-9]+) telechargement.php?doss=telechargement&nom=$1 [L]
RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2 [L]
ou
Code :
1
2
3
4
RewriteRule ^telechargement/([a-z0-9]+) telechargement.php?doss=telechargement&nom=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]+)/([a-z0-9-]+) acces.php?cat=$1&titre=$2 [L]
suffit?

Merci
sam1212 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 15/08/2011, 21h52   #14
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 285
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 285
Points : 8 570
Points : 8 570
Essayer ce que j'ai suggéré ne suffit pas ? As-tu au moins essayé ? Pourquoi veux-tu que j'écrive quelque chose qui ne serait pas dans le bon ordre ? Je maintiens la configuration que je donne.

Pour la première question sur le filtre, je ne peux que t'encourager à relire la discussion depuis le début : un filtre ^([a-z]+)/([a-z0-9-]+) est trop large (i.e. fonctionne pour autre chose que les pages que tu veux rediriger vers acces.php), c'est pour ça qu'on a ajouté une condition.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 02h11   #15
Invité de passage
 
Inscription : juillet 2011
Messages : 75
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 75
Points : 1
Points : 1
Oula je posais seulement une question pas de quoi s'emballer comme ça...
Pour acces.php il y avait besoin alors pourquoi pas là (maintenant j'ai compris pour l'histoire du filtre trop large).

Je mets en résolu et pas d'inquiétude je ne reviendrais plus poser de questions.

Merci toutefois pour ton aide et tes explications.
sam1212 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 09h02.


 
 
 
 
Partenaires

Hébergement Web