Come funziona il Mod_Rewrite?

Salve a tutti,

volevo sapere in linea sommaria come funziona il modulo mod_rewrite di apache non perchè non lo conosco più che altro perchè sto impazzendo da una settimana.

Io vorrei creare un link simile: http://miodominio.com/variabile1/variabile2 e recuperare dal php tali variabili dalla pagina index.php

Ecco quello che ho fatto finora:

RewriteEngine On
RewriteBase /miodominio
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /miodominio/index.php [L]

Grazie

inviato 8 anni fa
ulisse
X 0 X

Con quelle regole tutte le richieste andranno allo script index.php. Prova a mettere solamente un phpinfo() in index.php e cerca la variabile che contiene l'URL originale, quello con le variabili.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni,

grazie ora ci provo subito!

risposto 8 anni fa
ulisse
X 0 X

Con quelle regole tutte le richieste andranno allo script index.php. Prova a mettere solamente un phpinfo() in index.php e cerca la variabile che contiene l'URL originale, quello con le variabili.

 :bye:

Ecco una soluzione semplice semplice.

RewriteEngine On
RewriteBase /cartellamiodominio
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*) $1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z_]+)/([^/]+)/([^/]+)/ index.php?var1=$1&var2=$2&var3=$3 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z_]+)/([^/]+) index.php?var1=$1&var2=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?var1=$1 [L]

Trovo ancora delle difficoltà nella regex pare che con tre variabili

risposto 8 anni fa
ulisse
X 0 X

Non è la strada migliore.

Se usi la precedente espressione regolare, che non dipende dal numero dei parametri, puoi realizzare una soluzione molto più flessibile.

Ti avevo suggerito di mettere nell'index.php un phpinfo() perché in questo modo ti saresti accorto che anche se tutte le richieste vengono reindirizzate ad index.php, il vero URL non viene perso.

Infatti se provi ad accedere a www.tuosito.it/var1/var2/var3 troverai nella variabile $_SERVER["REQUEST_URI"] la stringa "/var1/var2/var3". Come puoi vedere quindi index.php può sempre leggere queste informazioni e comportarsi di conseguenza.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Quindi se ho capito bene, mi consigli di gestire tutto via regex all'interno del codice o semplicemente con uno split della stringa?

Come devo effettuare un POST da un semplice modulo che segua questi principi?

risposto 8 anni fa
ulisse
modificato 8 anni fa
X 0 X

Splittando l'URI lo script index.php dovrà capire a quale script far gestire la particolare richiesta dell'utente. A questo punto index.php caricherà questo script e delegerà ad esso la gestione della richiesta.

Il submit di un form è una richiesta come tutte le altre. L'attributo action del form imposta l'URL a cui inviare i dati del form. Ache questo URL dovrà essere nella forma www.tuosito.it/var1/var2/var3 in modo da usare la logica dello split di index.php anche in questi casi.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Niente da fare!

Non ci riesco!  :tichedoff:

Sto provando in tutti i modi.

Sono arrivato a realizzare questo pezzo:

RewriteEngine On
RewriteBase /miosito
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?action=$1&id=$2 [NC,L]

ma appena scrivo: http://miosito.com/listacategorie/123 i percorsi delle immagini, dei css, e dei files javascript vengono riscritti. Non ignora i file ne le directory!

Qualche idea?

risposto 8 anni fa
ulisse
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda