Question

En ce moment je fais quelque chose comme ça:

RewriteRule ^/?logout(/)?$ logout.php
RewriteRule ^/?config(/)?$ config.php

Je préférerais de beaucoup avoir une règle qui ferait la même chose pour chaque URL. Je n'ai donc pas à les ajouter chaque fois que j'ajoute un nouveau fichier.

De plus, j'aime bien associer des éléments tels que "/ config / new" à "config_new.php" si cela est possible. Je suppose qu'une expression rationnelle me permettrait de réaliser cela?

Était-ce utile?

La solution

Essayez:

RewriteRule ^ /? (\ w +) /? $ $ 1.php

le $ 1 est le contenu de la première chaîne capturée entre parenthèses. Les crochets autour de la 2ème barre oblique ne sont pas nécessaires.

modifier: pour l'autre correspondance, essayez ceci:

RewriteRule ^ /? (\ w +) / (\ w +) /? $ $ 1_ $ 2.php

Autres conseils

Je voudrais faire quelque chose comme ça:

RewriteRule ^/?(logout|config|foo)/?$ $1.php
RewriteRule ^/?(logout|config|foo)/(new|edit|delete)$ $1_$2.php

Je préfère lister explicitement les URL que je veux associer, afin de ne pas avoir à m'inquiéter du contenu statique ni à ajouter de nouvelles choses plus tard qui n'ont pas besoin d'être réécrites dans des fichiers php.

Ceci est correct si toutes les sous-URL sont valides pour toutes les URL racine ( livre / nouveau , film / nouveau , utilisateur / nouveau ), mais pas si bon si vous voulez avoir différents sous-URL en fonction de l'action racine ( logout / new n'a pas beaucoup de sens). Vous pouvez gérer cela avec une expression rationnelle plus complexe ou en acheminant tout vers un fichier php unique qui déterminera les fichiers à inclure et à afficher en fonction de l'URL.

La réécriture de mod ne peut pas (potentiellement) effectuer des remplacements illimités comme vous le souhaitez dans la deuxième partie de votre question. Mais consultez le moteur de réécriture externe au bas du Guide de réécriture d'URL Apache :

  

Moteur de réécriture externe

     

Description:

     

Une FAQ: Comment résoudre le problème FOO / BAR / QUUX / etc. problème? Il semble n'y avoir aucune solution par l'utilisation de mod_rewrite ...   Solution:

     

Utilisez un RewriteMap externe, c’est-à-dire un programme qui agit comme un RewriteMap. Il est exécuté une fois au démarrage d’Apache reçoit les URL demandées sur STDIN et doit mettre l’URL résultante (généralement réécrite) sur STDOUT (même ordre!).

RewriteEngine on
RewriteMap    quux-map       prg:/path/to/map.quux.pl
RewriteRule   ^/~quux/(.*)$  /~quux/${quux-map:$1}

#!/path/to/perl

#   disable buffered I/O which would lead
#   to deadloops for the Apache server
$| = 1;

#   read URLs one per line from stdin and
#   generate substitution URL on stdout
while (<>) {
    s|^foo/|bar/|;
    print 

La réécriture de mod ne peut pas (potentiellement) effectuer des remplacements illimités comme vous le souhaitez dans la deuxième partie de votre question. Mais consultez le moteur de réécriture externe au bas du Guide de réécriture d'URL Apache :

  

Moteur de réécriture externe

     

Description:

     

Une FAQ: Comment résoudre le problème FOO / BAR / QUUX / etc. problème? Il semble n'y avoir aucune solution par l'utilisation de mod_rewrite ...   Solution:

     

Utilisez un RewriteMap externe, c’est-à-dire un programme qui agit comme un RewriteMap. Il est exécuté une fois au démarrage d’Apache reçoit les URL demandées sur STDIN et doit mettre l’URL résultante (généralement réécrite) sur STDOUT (même ordre!).

<*>      

Ceci est un exemple uniquement démonstratif et réécrit toutes les URL / ~ quux / foo / ... dans / ~ quux / bar / .... En fait, vous pouvez programmer ce que vous voulez. Notez cependant que, même si de telles cartes peuvent également être utilisées par un utilisateur moyen, seul l'administrateur du système peut la définir.

; }
     

Ceci est un exemple uniquement démonstratif et réécrit toutes les URL / ~ quux / foo / ... dans / ~ quux / bar / .... En fait, vous pouvez programmer ce que vous voulez. Notez cependant que, même si de telles cartes peuvent également être utilisées par un utilisateur moyen, seul l'administrateur du système peut la définir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top