.htaccess riscrivi riscrivi caso 2 cartella livello = info
-
05-07-2019 - |
Domanda
Volevo impostare .htaccess
per riscrivere:
example.com/bla/info/
a
example.com/info/index.php?q=bla
example.com/bla/info/txt/
a
example.com/info/index.php?q=bla&t=txt
Volevo che il browser continuasse a essere visualizzato:
example.com/bla/info/txt/
Non volevo riscrivere nelle riscritture di livello 2, come:
example.com/bla/xxx/
o
example.com/ccc/zzz/aaa/
ma
example.com/silly/info/
funzionerebbe così come
example.com/strange/info/mytxt/
Aveva senso?
Qualche aiuto?
Soluzione
Se inizi il tuo modello con ^ e lo finisci con $, la regola si applicherà solo se l'intera stringa corrisponde.
RewriteRule ^/bla/info/$ /info/index.php?q=bla
RewriteRule ^/bla/info/txt/$ /info/index.php?q=bla&t=txt
Se non si utilizza l'opzione [R], l'URL visualizzato nel browser sarà quello inserito dall'utente.
Stai cercando di realizzare questo scopo generale? In tal caso, è possibile utilizzare la corrispondenza del tipo regex e la sostituzione delle variabili. Per far corrispondere 'bla' a qualsiasi stringa fino alla barra successiva (/), usa
([^/]+)
nel tuo modello e fai riferimento a $ 1 nella tua sostituzione.
RewriteRule ^/([^/]+)/info/$ /info/index.php?q=$1
RewriteRule ^/([^/]+)/info/([^/]+)/$ /info/index.php?q=$1&t=$2
Raccomando le le pagine web di Apache su mod_rewrite per maggiori informazioni .
[Modifica. Risolto il problema con le regole per non includere il nome host nel modello, come capito dal poster originale.]
-
BMB
Altri suggerimenti
mi hai portato sulla strada giusta.
Ho finito con qualcosa del genere:
RewriteRule ^([^/\.]+)/info/?$ example/info/index.php?q=$1 [L]
grazie mille