Domanda

In questo momento sto facendo qualcosa del genere:

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

Preferirei di gran lunga avere una regola che farebbe la stessa cosa per ogni url, quindi non devo continuare ad aggiungerle ogni volta che aggiungo un nuovo file.

Inoltre, mi piace abbinare cose come '/ config / new' a 'config_new.php' se è possibile. Immagino che un po 'di regexp mi permetterebbe di farlo?

È stato utile?

Soluzione

Prova:

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

$ 1 è il contenuto della prima stringa catturata tra parentesi. Le parentesi attorno alla 2a barra non sono necessarie.

modifica: per l'altra partita, prova questo:

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

Altri suggerimenti

Vorrei fare qualcosa del genere:

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

Preferisco elencare esplicitamente gli URL che voglio abbinare, in modo da non dovermi preoccupare di contenuti statici o aggiungere nuove cose in seguito che non devono essere riscritte in file php.

Quanto sopra va bene se tutti gli URL secondari sono validi per tutti gli URL di root ( book / new , movie / new , user / new ), ma non va bene se si desidera avere diversi sub-url a seconda dell'azione root ( logout / new non ha molto senso). Puoi gestirlo con regex più complesso o instradando tutto su un singolo file php che determinerà quali file includere e visualizzare in base all'URL.

La riscrittura delle mod non può fare (potenzialmente) sostituzioni illimitate come vuoi fare nella seconda parte della tua domanda. Ma controlla il motore di riscrittura esterno nella parte inferiore della Guida alla riscrittura degli URL di Apache :

  

Motore di riscrittura esterno

     

Descrizione:

     

Una FAQ: Come possiamo risolvere FOO / BAR / QUUX / ecc. problema? Non sembra esserci alcuna soluzione con l'uso di mod_rewrite ...   Soluzione:

     

Utilizza una RewriteMap esterna, ovvero un programma che agisce come una RewriteMap. Viene eseguito una volta all'avvio di Apache riceve gli URL richiesti su STDIN e deve inserire l'URL risultante (solitamente riscritto) su STDOUT (stesso ordine!).

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 riscrittura delle mod non può fare (potenzialmente) sostituzioni illimitate come vuoi fare nella seconda parte della tua domanda. Ma controlla il motore di riscrittura esterno nella parte inferiore della Guida alla riscrittura degli URL di Apache :

  

Motore di riscrittura esterno

     

Descrizione:

     

Una FAQ: Come possiamo risolvere FOO / BAR / QUUX / ecc. problema? Non sembra esserci alcuna soluzione con l'uso di mod_rewrite ...   Soluzione:

     

Utilizza una RewriteMap esterna, ovvero un programma che agisce come una RewriteMap. Viene eseguito una volta all'avvio di Apache riceve gli URL richiesti su STDIN e deve inserire l'URL risultante (solitamente riscritto) su STDOUT (stesso ordine!).

<*>      

Questo è solo un esempio dimostrativo e riscrive tutti gli URL / ~ quux / foo / ... in / ~ quux / bar / .... In realtà puoi programmare quello che ti piace. Ma nota che mentre tali mappe possono essere utilizzate anche da un utente medio, solo l'amministratore di sistema può definirlo.

; }
     

Questo è solo un esempio dimostrativo e riscrive tutti gli URL / ~ quux / foo / ... in / ~ quux / bar / .... In realtà puoi programmare quello che ti piace. Ma nota che mentre tali mappe possono essere utilizzate anche da un utente medio, solo l'amministratore di sistema può definirlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top