/ / mod_rewrite: si può fare riferimento a un riferimento posteriore due volte? - regex, apache, mod-rewrite

mod_rewrite: si può fare riferimento a un riferimento arretrato due volte? - regex, apache, mod-rewrite

Ho una regola di riscrittura (in un file htaccess di Apache) che sta tentando di usare un riferimento all'indietro due volte da una sola acquisizione ($ 1):

RewriteRule ^([A-Za-z0-9_-]+)/?$ $1.php?nav=$1

Sembra che la stringa di query sia lasciata emtpy, come

example.com/new

è stato riscritto come

example.com/new.php?nav=

quello che voglio è

example.com/new.php?nav=new

La mia domanda: posso fare riferimento a $ 1 due volte nell'espressione?

AGGIORNARE:

L'Apache documentazione su mod_rewrite indica che puoi fare riferimento a acattura tutte le volte che vuoi nella parte di sostituzione di una regola di riscrittura. Tuttavia, dopo aver provato per un paio di giorni non sono riuscito a farlo funzionare. Ho fatto in modo che la mia regola passasse nei regex tester online che sono là fuori, ma non sul mio sito. Alla fine ho ridisegnato il mio sistema di menu in modo da poter usare regole di riscrittura più semplici.

risposte:

1 per risposta № 1

Questa espressione regolare che stai utilizzando è errata:

^(A-Za-z0-9-_)$

L'intervallo è consentito solo tra parentesi quadre e la tua necessità di utilizzo + accessorio per abbinare più di 1 carattere.

Sostituisci il tuo RewriteRule con questo:

RewriteRule ^([a-z0-9_-]+)/?$ $1.php?nav=$1 [L,NC,QSA]

0 per risposta № 2

Prova questo invece:

RewriteRule ^([w]*)/?$   $1.php?nav=$1 [L]

E sì. I riferimenti posteriori possono essere usati più di una volta.

AGGIORNARE

Secondo il tuo commento:

RewriteEngine On
RewriteBase /information/
RewriteRule ^article([0-9]+)/?$ get-article.php?article=$1 [L]
RewriteRule ^blog([0-9]+)/?$ get-blog.php?nav=blog&entry=$1 [L]

RewriteCond %{REQUEST_URI} /new
RewriteRule ^([w]*)/?$   $1.php?nav=$1 [L]

L'ultima condizione e l'ultima regola funzionano bene. Il risultato è:

http://example.com/new.php?nav=new