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 № 1Questa 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